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

新手上路,请多包涵

我正在使用 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。夏令时是这里最大的挑战。谢谢!

原文由 user1893702 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 583
2 个回答

我想出来的方法是:

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

我想指出一些事情,但我希望能为某人节省这让我负担重重的日子。我的主要问题是无论我在做什么,Amazon Lambda 都在提供 UTC 时间。此问题的解决方法是简单地设置 Node TZ 环境变量:

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

原文由 user1893702 发布,翻译遵循 CC BY-SA 3.0 许可协议

首先,安装 moment timezone 并使用 timezone-with-data.js 安装所有时区 --- 或者 专门只加载你需要的时区

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

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

如果您只是简单地执行 moment(date_string).tz("America/New_York") 默认情况下,时间会在您当地的时区进行解析,并且不会调整日期。

原文由 Aymon Fournier 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题