在 javascript 中将一个时区转换为另一个时区

Convert one timezone to another in javascript

我正在寻找一个接收时间、源时区的函数 和目的地 returns 目的地时区的时间

时区格式如下: 'utc'、'est'、'edt'、'gmt'、...

function convertTime(time,fromZone,toZone){
   // do conversion
   return convertedTime;
}

这里有一个很好的 Whosebug 过去 - post 关于这个一般主题:

How to initialize a JavaScript Date to a particular time zone

抱歉,由于以下几个原因,无法按照您描述的方式在时区之间进行转换:

  • 许多时区缩写是不明确的。例如,CST 可以是中部标准时间、古巴标准时间或中国标准时间。 IST 可能是印度标准时间、以色列标准时间或爱尔兰夏令时。还有很多其他的例子。

  • 并不是每个人都同意时区的缩写应该是什么。例如,在夏威夷,HSTHAST都是常用的。

  • 并非所有时区缩写都是英文的。例如,HNEHAE 是法国时区的缩写,用于加拿大东部时区。

  • 并非所有时区 都有 我们认为的缩写。例如,哈萨克斯坦有两个时区。在该国西部,他们比 UTC 早 5 小时。在该国东部,他们比 UTC 早 6 小时。过去,说英语的人会在一些主要城市的名称之后分配一些虚构的缩写,例如 AQTTORAT 到西部,ALMT 到东部,但是 [=其中 76=] 实际使用过,但从未使用过。

  • 假设ESTEDT是美国和加拿大观察到的东部标准时间和东部夏令时,你必须预先确定是否通过ESTEDT 到您的函数,具体取决于给定时间哪个有效。例如,如果您在今天 2013 年 3 月 13 日传递时间并使用 EST,您将出错,因为 EDT 当前有效。这将适用于 fromZonetoZone,并且每个都必须独立确定。

  • 假设您尝试编写逻辑来解决前一点。如果两个不同的时区缩写同时应用于同一时区的不同部分,您仍然会遇到问题。例如,现在 MDT 适用于美国山区时区的大部分地区 - 除了大部分(但不是全部)亚利桑那州 MST 适用。

通过使用 IANA tz database 标识符(例如 America/New_York,而不是缩写,考虑了上述所有因素以及更多因素。

我还建议查看以下资源: