如何在没有时移的情况下从数据库中解析日期字符串?

时间:2016-07-04 08:28:11

标签: javascript node.js date momentjs

我从数据库中获取2016-07-13T00:00:00.000Z字符串并将其转换为MM / DD / YYYY格式,并使用如下所示的moment.js:

result = moment('2016-07-13T00:00:00.000Z').format('MM/DD/YYYY');

打印07/12/2016,但我期待2016年7月13日。 本地Linux时区是America / New_York。 date命令打印此Mon Jul 4 04:28:19 EDT 2016

2 个答案:

答案 0 :(得分:2)

您所拥有的日期是UTC格式,最后由z表示。

当您使用默认矩构造函数moment()时,它会将您从指定偏移量(在本例中为UTC)中传递的时间转换为机器的本地时间。这就是你的日期在变化的原因。因为这是一个UTC日期,为了保持完全相同,您可以使用moment.utc()

moment.utc('2016-07-13T00:00:00.000Z').format('MM/DD/YYYY');
"07/13/2016"

或者,parseZone也可以正常工作:

moment.parseZone('2016-07-13T00:00:00.000Z').format('MM/DD/YYYY');
"07/13/2016"

有关所有构造函数的更多信息,请参阅parsing guidethis blog post

答案 1 :(得分:0)

你应该使用momentjs时区:http://momentjs.com/timezone/

yourdate = moment.tz("2016-07-13T00:00:00.000Z", "America/New_York");
alert(yourdate.format('MM/DD/YYYY'));

这应该会在输出中给出正确的日期。