mongoDB ISO使用moment.js时区转换为字符串

时间:2017-06-01 09:39:13

标签: javascript mongodb date datetime momentjs

我对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。我在这做错了什么?对于任何客户连接到我的应用来自任何时区,我需要这些时间相同,不应转换它们。这里的最佳做法是什么?

1 个答案:

答案 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'));