我正在使用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。夏令时是这里面临的最大挑战。谢谢!
答案 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.js
或specifically 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")
,则默认情况下,时间会在您的本地时区中解析,并且不会调整日期。