Moment.js - 将UTC转换为东部时间

时间:2016-02-13 10:38:45

标签: javascript node.js momentjs aws-lambda

我正在使用moment-timezone.js,以便通过node.js将UTC时间转换为America/New_York。我是这样做的:

var moment  = require('moment-timezone');
moment.tz.add('America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0');

var now    = new Date().toISOString();
now = moment(now).tz("America/New_York").toDate();

这似乎在我的本地计算机上运行良好,但是当我在AWS Lambda上运行时,now时间仍然以UTC格式输出。

我在这里做错了吗?我真的不想只是为了获得准确的纽约时间而使用API​​。夏令时是这里面临的最大挑战。谢谢!

3 个答案:

答案 0 :(得分:4)

我想出这个的方法是:

var now = ((moment(Date.now()).utcOffset('-0500').format('x'));
//Parse it into native JS object: 
now = new Date(parseInt(now));

我想指出一些事情,但我希望能在某些日子里拯救某些人,因为这会给我带来负担。我的主要问题是,无论我在做什么,亚马逊Lambda都在提供UTC时间。解决此问题的方法是简单地设置Node TZ环境变量:

process.env.TZ = 'America/New_York';

答案 1 :(得分:2)

东部标准时间(EST)比世界协调时间(UTC)晚5小时。

使用moment.js,您可以从UTC时区减去5小时。

for boundary in Boundary.objects.all():
    Location.objects.filter(coordinates__within=boundary.geom)

如果您愿意添加另一个库,例如moment.utc().subtract(5, 'hours').format("YYYY-MM-DD HH:mm:ss.SSS") 。您可以使用:

moment-timezone

答案 2 :(得分:0)

首先,安装moment timezone并使用timezone-with-data.jsspecifically only load the timezones you need

安装所有时区

如果您有一个已知的UTC日期,并且想要将其转换为东部时间,请使用moment.utc()函数来实际解析UTC日期字符串。然后,当您调用.tz()时,它将正确转换:

moment.utc(date_string).tz("America/New_York")

如果您仅执行moment(date_string).tz("America/New_York"),则默认情况下,时间会在您的本地时区中解析,并且不会调整日期。

相关问题