我无法通过以下方式获取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 .
Date
我怎样才能做到这一点?
时间戳是一个时间点 . 通常,这可以通过epoc之后的毫秒数表示(1970年1月1日12点UTC的Unix Epoc) . 该时间点的格式取决于时区 . 虽然它是相同的时间点,但"hours value"在时区之间并不相同,必须考虑到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
就毫秒而言,每个都是相同的 . 它是完全相同的时间点(虽然在某些运行中,后一毫秒是一个更高) .
就格式而言,每个都可以在特定时区中表示 . 对于完全相同的时间点,该时区字符串的格式看起来不同!
你要比较这些时间 Value 吗?只需转换为毫秒 . 一个毫秒值始终小于,等于或大于另一毫秒值 .
你想比较特定的'hour'或'day'值并担心他们"came from"不同的时区吗?首先使用 moment.utc( existingDate ) 转换为UTC,然后执行操作 . 从数据库出来时,这些转换的示例是示例中的最后一次 console.log 调用 .
moment.utc( existingDate )
console.log
调用toDate将创建一个基础JS Date对象的 copy (文档是关于它不是副本的右下角) . JS Date对象以UTC格式存储,并始终打印到东部时间 . 无论是否.utc()修改当前包装的底层对象都使用下面的代码 .
你不需要时刻 .
new Date().getTime()
这是有效的,因为JS Date的核心是来自Unix Epoch的UTC . 这是非常令人困惑的,我相信界面中的一个很大的缺陷是混合本地和UTC这样的时间,没有方法中的描述 .
2 回答
时间戳是一个时间点 . 通常,这可以通过epoc之后的毫秒数表示(1970年1月1日12点UTC的Unix Epoc) . 该时间点的格式取决于时区 . 虽然它是相同的时间点,但"hours value"在时区之间并不相同,必须考虑到UTC的偏移量 .
这里有一些代码来说明 . 一点是时间以三种不同的方式捕获 .
哪个输出:
就毫秒而言,每个都是相同的 . 它是完全相同的时间点(虽然在某些运行中,后一毫秒是一个更高) .
就格式而言,每个都可以在特定时区中表示 . 对于完全相同的时间点,该时区字符串的格式看起来不同!
你要比较这些时间 Value 吗?只需转换为毫秒 . 一个毫秒值始终小于,等于或大于另一毫秒值 .
你想比较特定的'hour'或'day'值并担心他们"came from"不同的时区吗?首先使用
moment.utc( existingDate )
转换为UTC,然后执行操作 . 从数据库出来时,这些转换的示例是示例中的最后一次console.log
调用 .调用toDate将创建一个基础JS Date对象的 copy (文档是关于它不是副本的右下角) . JS Date对象以UTC格式存储,并始终打印到东部时间 . 无论是否.utc()修改当前包装的底层对象都使用下面的代码 .
你不需要时刻 .
这是有效的,因为JS Date的核心是来自Unix Epoch的UTC . 这是非常令人困惑的,我相信界面中的一个很大的缺陷是混合本地和UTC这样的时间,没有方法中的描述 .