我无法通过以下方式获取MongoDB记录的JavaScript Date字符串.它继续使用我当地的时间.
var utc = moment.utc().valueOf();
console.log(moment.utc(utc).toDate());
Run Code Online (Sandbox Code Playgroud)
输出:
Tue Nov 11 2014 14:42:51 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)
我需要它在UTC中,所以我可以在Mongo中保留这个时间戳,所以类型就是Date.
我怎样才能做到这一点?
cla*_*lay 68
时间戳是一个时间点.通常,这可以通过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() );
Run Code Online (Sandbox Code Playgroud)
哪个输出:
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
Run Code Online (Sandbox Code Playgroud)
就毫秒而言,每个都是相同的.它是完全相同的时间点(虽然在某些运行中,后一毫秒是一个更高).
就格式而言,每个都可以在特定时区中表示.对于完全相同的时间点,该时区字符串的格式看起来不同!
你要比较这些时间价值吗?只需转换为毫秒.一个毫秒值始终小于,等于或大于另一毫秒值.
您想比较特定的"小时"或"日期"值并担心它们"来自"不同的时区吗?首先使用转换为UTC moment.utc( existingDate ),然后执行操作.从数据库出来时,这些转换console.log的示例是示例中的最后一次调用.
调用toDate将创建基础JS Date对象的副本(文档不是副本,是完全错误的)。JS Date对象存储在UTC中,并将始终打印到东部时间。在不考虑.utc()是否修改瞬间包装的基础对象的情况下,请使用以下代码。
您不需要为此。
new Date().getTime()
Run Code Online (Sandbox Code Playgroud)
之所以可行,是因为JS Date的核心是Unix Epoch中的UTC。这非常令人困惑,我认为将这样的本地时间和UTC时间混合在一起而在方法中没有描述的界面存在很大的缺陷。
| 归档时间: |
|
| 查看次数: |
79231 次 |
| 最近记录: |