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

3 javascript node.js momentjs aws-lambda

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

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();
Run Code Online (Sandbox Code Playgroud)

这似乎在我的本地计算机上可以正常工作,但是当我在AWS Lambda上运行它时,now时间仍然以UTC的形式输出。

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

Aym*_*ier 9

首先,安装时刻时区并通过使用timezone-with-data.js专门仅加载您需要的时区来安装所有时

如果您知道某个日期采用moment.utc()UTC 格式并希望将其转换为东部时间,请使用该函数实际解析 UTC 日期字符串。然后当你调用.tz()它时它会正确转换:

moment.utc(date_string).tz("America/New_York")
Run Code Online (Sandbox Code Playgroud)

如果您只是简单地moment(date_string).tz("America/New_York")在本地时区中解析时间,则默认情况下它不会调整日期。


小智 6

我想出来的方法是:

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

我想指出一点,尽管我希望这可以节省一些人的时间。我的主要问题是,无论我在做什么,Amazon Lambda都在提供UTC时间。解决此问题的方法是简单地设置Node TZ环境变量:

process.env.TZ = 'America/New_York';
Run Code Online (Sandbox Code Playgroud)

  • 这也能处理日光变化吗? (4认同)
  • 哇好技巧!我非常确定,如果您选择像“America/New_York”、@Shamseer 这样的 IANA 区域,而不是像“-0500”这样的静态偏移(如上所述),那么日光变化将立即得到处理。 (2认同)