我在美国中部时区 (CDT)有一个日期时间(2017 年 10 月 27 日星期五凌晨 4:00:00)。我想将此日期时间转换为不同的时区。这些是我想转换的时区。
Eastern Time (EDT)
Pacific Time (PDT)
New Delhi, India (IST)
Central Europian Time (CET)
Riyadh, Saudi Arabia (AST)
Pakistan Standard Time (PKT)
Lagos, Nigeria (WAT)
Australian Standard Time (AET)
Greenwich Mean Time (GMT)
Moscow, Russia (MSK)
China Standard Time (CST)
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的
var dateTime = moment.tz("2017-10-27 4:00:00 AM", "America/Chicago");
var IST = dateTime.tz('Asia/Calcutta').format('MMMM Do YYYY, h:mm:ss a');
console.log(IST) // October 27th 2017, 9:30:00 am
Run Code Online (Sandbox Code Playgroud)
返回的日期时间错误。因为印度标准时间比中部时间早 10 小时 30 分钟。
应该是2017 年 10 月 27 日星期五下午 2:30 (IST)
谢谢!
问题不在于转换为印度时区 - 这是芝加哥时间的原始解析。
这个:
var dateTime = moment.tz("2017-10-27 4:00:00 AM", "America/Chicago");
Run Code Online (Sandbox Code Playgroud)
... 被视为 4am UTC,然后转换为 America/Chicago,因此它最终代表芝加哥当地时间(10 月 26 日)晚上 11 点。您只需记录dateTime.
如果将代码更改为:
var dateTime = moment.tz("2017-10-27 04:00:00", "America/Chicago");
Run Code Online (Sandbox Code Playgroud)
...然后将其视为当地时间 27 日凌晨 4 点,我相信这正是您所期望的。如您所料,转换为亚洲/加尔各答的结果是下午 2:30。
因此,要么更改输入的格式,要么指定该格式。例如,这也很好用:
var dateTime = moment.tz("2017-10-27 4:00:00 AM", "YYYY-MM-DD h:mm:ss a", "America/Chicago");
Run Code Online (Sandbox Code Playgroud)