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' 没有兼容的调用签名。” [复制]