MomentJS以UTC格式获取JavaScript日期

时间:2014-11-11 19:45:32

标签: node.js momentjs

我无法通过以下方式获取MongoDB记录的JavaScript Date字符串。它继续使用当地时间。

var utc = moment.utc().valueOf();
console.log(moment.utc(utc).toDate());

输出:

Tue Nov 11 2014 14:42:51 GMT-0500 (EST)

我需要它在UTC中,所以我可以在Mongo中粘贴这个时间戳,因此类型将是Date

我该怎么做?

4 个答案:

答案 0 :(得分:59)

时间戳是一个时间点。通常,这可以通过epoc之后的毫秒数表示(1970年1月1日12点UTC的Unix Epoc)。该时间点的格式取决于时区。虽然它是相同的时间点,但“小时值”在时区之间并不相同,必须考虑到UTC的偏移量。

这里有一些代码可供说明。一点是时间以三种不同的方式捕获。

var moment = require( 'moment' );

var localDate = new Date();
var localMoment = moment();
var utcMoment = moment.utc();
var utcDate = new Date( utcMoment.format() );

//These are all the same
console.log( 'localData unix = ' + localDate.valueOf() );
console.log( 'localMoment unix = ' + localMoment.valueOf() );
console.log( 'utcMoment unix = ' + utcMoment.valueOf() );

//These formats are different
console.log( 'localDate = ' + localDate );
console.log( 'localMoment string = ' + localMoment.format() );
console.log( 'utcMoment string = ' + utcMoment.format() );
console.log( 'utcDate  = ' + utcDate );

//One to show conversion
console.log( 'localDate as UTC format = ' + moment.utc( localDate ).format() );
console.log( 'localDate as UTC unix = ' + moment.utc( localDate ).valueOf() );

哪个输出:

localData unix = 1415806206570
localMoment unix = 1415806206570
utcMoment unix = 1415806206570
localDate = Wed Nov 12 2014 10:30:06 GMT-0500 (EST)
localMoment string = 2014-11-12T10:30:06-05:00
utcMoment string = 2014-11-12T15:30:06+00:00
utcDate  = Wed Nov 12 2014 10:30:06 GMT-0500 (EST)
localDate as UTC format = 2014-11-12T15:30:06+00:00
localDate as UTC unix = 1415806206570

以毫秒计,每个都是相同的。它是完全相同的时间点(虽然在某些运行中,后一毫秒是一个更高)。

就格式而言,每个都可以在特定的时区中表示。对于完全相同的时间点,该时区字符串的格式看起来不同!

您要比较这些时间值吗?只需转换为毫秒。一个毫秒值始终小于,等于或大于另一毫秒值。

您想比较特定的“小时”或“日期”值并担心它们“来自”不同的时区吗?首先使用moment.utc( existingDate )转换为UTC,然后执行操作。从数据库出来时,这些转换的示例是示例中的最后console.log次调用。

答案 1 :(得分:4)

调用toDate将创建一个基础JS Date对象的副本(文档是关于它的不是副本)。 JS Date对象以UTC格式存储,并始终打印到东部时间。无论是否.utc()修改当前包装的底层对象都使用下面的代码。

你不需要时间。

new Date().getTime()

这是有效的,因为JS Date的核心是来自Unix Epoch的UTC。这是非常令人困惑的,我相信界面中的一个很大的缺陷就是混合本地和UTC这样的时间而没有方法中的描述。

答案 2 :(得分:0)

或者简单地:

Date.now

来自MDN documentation

  

Date.now()方法返回自1970年1月1日以来经过的毫秒数

ECMAScript 5.1

起可用

与上面提到的(new Date().getTime())相同,但是版本更快捷。

答案 3 :(得分:0)

这将为您提供 UTC 时区 DateTime。

var convertedUtcDateTime = moment.utc(dateTimeToBeConverted);