为什么js时刻会给出不同的毫秒数?

时间:2018-11-05 18:29:54

标签: javascript angularjs momentjs angular-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>

如何获得相同的值?

2 个答案:

答案 0 :(得分:6)

在矩对象,日期对象和字符串之间来回操纵的操作非常麻烦。目前尚不清楚您实际上想要完成什么,但是这些都没有必要。

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

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

这将根据您所运行的浏览器给出不同的结果(因为日期对象解析的实现取决于标准格式时的实现依赖于实现),并且会因运行代码的时区而异(因为它假定该值是以当地时间表示的。)

对于我来说,在美国太平洋时区的Windows 10的Chrome 70中运行,该日志记录为-2209046400000。您可能会得到不同的结果。

通常,不要做太多的操作。您可能想要的大多数功能都内置于Moment中。每当您发现自己转换为字符串再返回为对象,或者使用Date构造函数时,都可能会引入错误。

答案 1 :(得分:1)

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

尝试将您的代码更新为

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

您将获得一个更近的时间戳