[英]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 模式,因此所有get和set方法都使用它们的 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.