我在美国中部时区(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)
这就是我正在做的事情
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
返回的日期时间错误。因为印度标准时间比中部时间提前10小时30分。
应该 2017年10月27日星期五下午2:30 (IST)
谢谢!
答案 0 :(得分:4)
问题不在于转换到印度时区 - 它是芝加哥时间的原始解析。
此:
var dateTime = moment.tz("2017-10-27 4:00:00 AM", "America/Chicago");
...被视为凌晨4点 UTC ,然后转换为美国/芝加哥,因此它最终代表芝加哥当地时间晚上11点(10月26日)。您只需记录dateTime
。
如果您将代码更改为:
var dateTime = moment.tz("2017-10-27 04:00:00", "America/Chicago");
...然后在27日当地时间凌晨4点对待,这是我相信你的预期。根据您的预期,转换到亚洲/加尔各答的结果是下午2:30。
因此,要么更改输入的格式,或指定该格式。例如,这也可以正常工作:
var dateTime = moment.tz("2017-10-27 4:00:00 AM", "YYYY-MM-DD h:mm:ss a", "America/Chicago");