我对mongoDB和javascript如何处理日期/时间感到非常困惑。
我在指定的时区内有很多日期。我需要在mongoDB中以ISO格式存储它们。例如:
鉴于:"01.01.2013 15:00"
,这是纽约市当地时间。
由于我的机器不设置为NYC的时区,我创建了一个Date对象,其格式为-04:00
,因为NYC比UTC低4小时。所以:
var date = new Date("01-01-2013T15:00-04:00")
。如果我打开mongo-express查看它实际存储的内容,它会显示ISODate("2013-01-01T14:00:00.000Z")
。
然后使用moment.js在纽约时间获取它:
var test = moment("2013-01-01T14:00:00.000Z");
var out = test.tz('America/New_York').format('MMMM Do YYYY, h:mm:ss a');
console.log(out); //January 1st 2013, 9:00:00 am
这显然显示错误的时间,应该显示下午3:00:00。我在这做错了什么?对于任何客户连接到我的应用来自任何时区,我需要这些时间相同,不应转换它们。这里的最佳做法是什么?
答案 0 :(得分:2)
如果您知道max
位于"01.01.2013 15:00"
时区,则可以使用moment-timezone的moment.tz
方法解析它。
当docs时刻:
默认情况下,时刻会以当地时间进行分析和显示。
如果您想以UTC格式解析或显示片刻,可以使用
"America/New_York"
代替moment.utc()
。
这是一个实例:
moment()
var m = moment.tz("01.01.2013 15:00", "DD.MM.YYYY HH:mm", "America/New_York");
console.log(m.format('MMMM Do YYYY, h:mm:ss a'));