我使用矩js得到同一日期不同毫秒的错误。
我正在从服务器('-2208988800000'
)获取数据。我将值转换为'DD-MMM-YYYY'
。现在我想再次使用相同的毫秒数,为什么我得到相同日期的不同毫秒数?这是我的代码
http://plnkr.co/edit/1QoWLoFqkNAe2ebZ0V01?p=preview
我有两个控制台x1
和x2
。他们不同,为什么?
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>
如何获得相同的值?
答案 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'));
您将获得一个更近的时间戳