javascript - momentjs 在时区中显示

标签 javascript momentjs moment-timezone sheetjs

我很绝望。我位于德国。

我从 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/

相关文章:

javascript - 如何获取存储在 JavaScript 变量中的 HTML 数据

javascript - 响应时导航栏固定在顶部

javascript - 没有小时、分钟和秒的 getTime 对应的日期是什么?

javascript - Momentjs:如何将一个时区的日期/时间转换为 UTC 日期/时间

momentjs - 从国家或地区名称获取代码以设置 locale() moment.js

javascript - Material-ui ToolbarTitle 失去了它的字体系列

JavaScript/MomentJS : normalizing dates to current year

javascript - 从日期字符串中减去小时

javascript - 使用 moment timezone js 将日期字符串转换为带时区的日期

JavaScript != =""无法正常工作