簡體   English   中英

Moment.js - 將 UTC 轉換為東部時間

[英]Moment.js - Converting UTC To Eastern Time

我正在使用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。 夏令時是這里最大的挑戰。 謝謝!

首先,安裝時刻時區並使用timezone-with-data.js安裝所有時timezone-with-data.js專門只加載您需要的時區

如果您知道某個日期采用 UTC moment.utc()並希望將其轉換為東部時間,請使用moment.utc()函數實際解析 UTC 日期字符串。 然后當你調用.tz()時它會正確轉換:

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

如果您只是執行moment(date_string).tz("America/New_York") ,則默認情況下會在本地時區中解析時間,並且不會調整日期。

我想出來的方法是:

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';

東部標准時間 (EST) 比協調世界時 (UTC) 晚 5 小時。

使用 moment.js,您可以從 UTC 時區減去 5 小時。

moment.utc().subtract(5, 'hours').format("YYYY-MM-DD HH:mm:ss.SSS")

或者

如果您願意添加另一個庫,例如moment-timezone 你可以只使用:

moment().tz("America/New_York").format("YYYY-MM-DD HH:mm:ss.SSS")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM