MomentJS 错误输出

Posted

技术标签:

【中文标题】MomentJS 错误输出【英文标题】:MomentJS wrong output 【发布时间】:2020-01-02 15:27:39 【问题描述】:

我正在使用 moment 将毫秒转换为日期和时间它给了我预期的正确输出,但是在转换相同的日期+时间时它给了我错误的输出。

我用过 unix,valueOf moment 方法。

const moment = require('moment-timezone');

console.log(moment.tz(1567032260763,'x','America/Chicago').format('MM-DD-YYYY hh:mm:ss A')) //gives me 08-28-2019 05:44:20 PM which is right.

console.log(moment('08-28-2019 05:44:20 PM','MM-DD-YYYY hh:mm:ss A').valueOf());  // gives me 1567032260000 instead of 1567032260763

请指点我哪里错了!

【问题讨论】:

1567036363000 是正确的值。芝加哥是 UTC-6,所以 08-28-2019 05:52:43 PM 是 2019-08-28 23:52:43Z(小时是 17 + 6 =23),时间值由Date.UTC(2019,7,28,23,52,43)) 给出。 momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone -> 使用moment.tz(...),而不是moment(...).tz(...).tz(...) 是对时区 (momentjs.com/timezone/docs/#/using-timezones/converting-to-zone) 的转换 只是因为timezone @NeelRathod,那么我怎样才能得到正确的毫秒数 你需要传递时区,否则会使用你默认的本地时区 【参考方案1】:

您需要在此行添加时区:

moment('08-28-2019 05:44:20 PM','MM-DD-YYYY hh:mm:ss A').tz('America/Chicago').valueOf();

【讨论】:

Darek,在你回答之前我已经测试过了,不幸的是它不起作用!【参考方案2】:

function callMoment() 
console.log(moment.tz(1567032260763,'x','America/Chicago').format('MM-DD-YYYY hh:mm:ss A'))

console.log(moment.tz('08-28-2019 05:44:20.763 PM','MM-DD-YYYY hh:mm:ss.S A','America/Chicago').valueOf());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.26/moment-timezone-with-data.min.js"></script>
<button onclick="callMoment()">Call Me</button>

您在将其转换回来时缺少毫秒。

console.log(moment.tz(1567032260763,'x','America/Chicago').format('MM-DD-YYYY hh:mm:ss A'))

console.log(moment.tz('08-28-2019 05:44:20.763 PM','MM-DD-YYYY hh:mm:ss.S A','America/Chicago').valueOf());

现在输出是正确的。

【讨论】:

哦!我正在删除我的最后一条评论,输出不正确。

以上是关于MomentJS 错误输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Typescript 中正确导入 MomentJS 以解决以下错误:“Type 'typeof moment' 没有兼容的调用签名。” [复制]

使用MomentJS无法获得时差

Momentjs:将 12 小时转换为日期对象

Polymer WebComponent中的Momentjs - 全局未定义

用 momentJS 正确处理 DST 偏移

date.getTime 不是函数离子本地通知错误