我很绝望。我位于德国。
我从 Sheetjs 获取一个 Date 对象。 在 Excel 中,我看到类似 2020 年 3 月 5 日的日期。 我只需要一个像 2020-03-05 这样的字符串。
这个日期给了我:
console.log(maximalesBelegdatumJS);
console.log(moment(maximalesBelegdatumJS));
console.log(moment(maximalesBelegdatumJS).format('YYYY-MM-DD'));
输出为:
Wed Mar 04 2020 23:00:00 GMT+0100 (Mitteleuropäische Normalzeit)
Moment {_isAMomentObject: true, _i: Wed Mar 04 2020 23:00:00 GMT+0100 (Mitteleuropäische Normalzeit), _isUTC: true, _offset: -0, _pf: {…}, …}_isAMomentObject: true_i: Wed Mar 04 2020 23:00:00 GMT+0100 (Mitteleuropäische Normalzeit) {}_isUTC: true_offset: -0_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -2, charsLeftOver: 0, …}_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", _ordinal: "%d.", _dayOfMonthOrdinalParse: /\d{1,2}\./, …}_z: Zone {name: "UTC", abbrs: Array(1), untils: Array(1), offsets: Array(1), population: 0}_d: Wed Mar 04 2020 23:00:00 GMT+0100 (Mitteleuropäische Normalzeit) {}_isValid: true__proto__: Object
2020-03-04
我尝试了很多修饰符,例如 .utc()
、.local()
但我就是不明白。
我发现的一个解决方案(但我认为这是一种黑客)是添加utcOffset
:
console.log(moment(maximalesBelegdatumJS).add(moment(maximalesBelegdatumJS).utcOffset(), "minute"));
给予
Moment
_isAMomentObject: true
_i: Wed Mar 04 2020 23:00:00 GMT+0100 (Mitteleuropäische Normalzeit) {}
_isUTC: false
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -2, charsLeftOver: 0, …}
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", _ordinal: "%d.", _dayOfMonthOrdinalParse: /\d{1,2}\./, …}
_d: Thu Mar 05 2020 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit) {}
_isValid: true
提前谢谢您!
最佳答案
您的原始数据是中欧标准时间吗?假设您安装了时刻时区:
https://momentjs.com/timezone/docs/ .
console.log(moment.tz(maximalesBelegdatumJS, 'CET').format('YYYY-MM-DD'));
或者将“CET”替换为数据所在的原始时区。我认为发生的情况是日期未使用正确的时区初始化,这导致了转换问题。
如果这不起作用,您可以发布原始变量“maximalesBelegdatumJS”的 ISO 字符串吗?也许不是时刻有问题。
有趣的是,由于某种原因,原始日期时间以 UTC 初始化,然后 tz 属性更改为 CET,而没有实际转换日期时间。我从未使用过 SheetJs,但那里发生了一些事情。
您已经用 utcOffset() 暗示了答案:
console.log(moment(maximalesBelegdatumJS).utcOffset(2).format('YYYY-MM-DD'));
这将是一个更简单的版本。
关于javascript - momentjs 在时区中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61106045/