为什么 moment js 给出的毫秒数不一样?

Why moment js gives different milliseconds?

我使用 moment js 得到同一日期不同毫秒的错误。

我正在从服务器 ('-2208988800000') 获取数据。我转换了 'DD-MMM-YYYY' 中的值。现在我又想要相同的毫秒数,为什么我在同一日期得到不同的毫秒数?这是我的代码

http://plnkr.co/edit/1QoWLoFqkNAe2ebZ0V01?p=preview

我有两个控制台 x1x2。他们是不同的,为什么?

var x = '-2208988800000'
var d = new Date(moment(new Date(parseInt(x)).toUTCString()).format('DD-MMM-YYYY'));
console.log(d)
var x2 = moment(new Date(d).toUTCString()).format('x');
console.log(x2)
// why x1 and x2 is different
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

如何获得相同的值?

您在时刻对象、日期对象和字符串之间来回进行了大量操作。目前还不清楚您真正想要完成什么,但 none 应该是必要的。

至于结果,第一次调用日期构造函数是获取字符串值'31-Dec-1899',因此您可以将示例简化为:

var d = new Date('31-Dec-1899');
console.log(+d);

这将根据您使用的浏览器 运行 给出不同的结果(因为日期对象的解析实现在非标准格式时取决于实现),并且会随时间变化代码为 运行 的区域(因为假定该值是当地时间)。

对我来说,运行宁 Chrome 70 on Windows 10,在美国太平洋时区,这记录 -2209046400000。您可能会得到不同的结果。

一般情况下,不要做那么多的操作。您可能需要的大多数功能都内置在 Moment 中。任何时候您发现自己转换为字符串并返回对象,或使用 Date 构造函数,您都可能引入错误。

当您将日期格式设置为 DD-MMM-YYYY 时,您会损失小时和分钟,这是

的部分原因

尝试将您的代码更新为

var d = new Date(moment(new Date(parseInt(x)).toUTCString()).format('DD-MMM-YYYY HH:mm:ss'));

你会得到一个更接近的时间戳