momentjs和转换为unix会给出错误的日期

时间:2013-12-23 13:47:19

标签: javascript date datetime momentjs

我在使用正确的方式将日期转换为unix时遇到了一些麻烦:

var start = new Date(2013,11,2);
console.log('Start date: '+start);
console.log('Unix date: '+moment(start).unix());
console.log('Unix date 2: '+moment(start).add('hours', 1).unix());

Start date: Mon Dec 02 2013 00:00:00 GMT+0100 (CET)
Unix date: 1385938800
Unix date 2: 1385942400

请参阅http://jsfiddle.net/7Equ2/4/

但是在http://www.onlineconversion.com/unix_time.htm中输入转换后的unix日期会返回Sun,2013年12月1日23:00:00 GMT,而添加1小时会返回正确的unix日期。我想这是因为开始日期是在CET(我的语言环境时区)中创建的。所以我想我需要将开始日期作为UTC传递,但我必须保留日期值(即它应该仍然是“Mon Dec 02 2013 00:00:00”)。但我无法弄清楚如何。

我试过

moment(start).utc().unix(), 

但这似乎没有任何区别,因为它仍然返回Unix日期:1385938800

如何让它返回正确的unix日期?

1 个答案:

答案 0 :(得分:0)

时间戳没有时区。它们都与UTC相关。

Sun,2013年12月1日23:00:00 GMT 等于 2013年12月2日星期一00:00:00 GMT + 0100 如果您将第二个转换为UTC 。解决方案包括时刻时区并为所有时刻对象选择默认时区。

moment.tz.setDefault("UTC");

https://momentjs.com/timezone/

https://momentjs.com/timezone/docs/#/using-timezones/default-timezone/