繁体   English   中英

JavaScript - 使用 moment.js 将 UTC 日期转换为毫秒

[英]JavaScript - UTC date to milliseconds using moment.js

自 UNIX 纪元以来,我正在尝试将 UTC 日期转换为毫秒。

为此,我正在执行以下操作:

const date = new Date(); // local date
const utc = moment().utc(date); // UTC date
const utcMillis = utc.valueOf(); // Millis since UNIX epoch

目前,我住在西班牙(UTC + 2),我注意到

date.getTime() === moment().utc(date).valueOf()

为什么?

注意:你可以在这里在线测试

const date = new Date(); // local date

ECMAScript 中(目前)没有“本地日期”之类的东西。 所有Date实例都只是与 ECMAScript 纪元 1970-01-01T00:00:00Z 的偏移,这是编程中相当常见的纪元。

 const utc = moment().utc(date); // UTC date

utc方法将 moment 对象设置为 UTC 模式,因此所有getset方法都使用它们的 UTC 变体。 在这种情况下,在date调用getTime (或者valueOf ,结果是相同的)之后将创建一个新的moment对象。 由于该时间值已经是 UTC,UTC 模式对结果没有影响。

如果您只想要当前时间值(即从 ECMAScript 纪元的毫秒偏移量),那么Date.now()就可以做到这一点(允许系统时钟精度),而无需库或跳过箍。 :-)

日期的时区是什么并不重要,因为它只代表一个特定的时间点。 鉴于所有日期/时间都基于自 1970-01-01T00:00:00Z 以来的毫秒数,那么无论您做什么,只要 2 个日期代表同一时间点,那么它们的基础值应该也一样。

我将添加答案,引用官方文档:

ECMAScript Date.now()

getTime() 方法返回自ECMAScript epoch以来的毫秒数。

ECMAScript Date.valueOf()

valueOf() 方法将 Date 对象的原始值作为数字数据类型返回,即自 UTC 1970 年 1 月 1 日午夜以来的毫秒数。 此方法在功能上等同于 Date.prototype.getTime() 方法。

MomentJS moment().valueOf() ;

moment#valueOf 简单地输出自 Unix 纪元以来的毫秒数,就像 Date#valueOf

这三个都有效地返回自 unix 纪元以来经过的毫秒数。 并且该值与当前时区或与日期对象关联的偏移量无关


PS 升级到luxon

Date()不重视本地日期和时间,而是重视 UTC 时间。 在此处查看文档: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

因此,两个值相等是完全有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM