添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
如何将JavaScript日期初始化为特定时区我将特定时区的日期时间作为字符串,我想将其转换为本地时间。但是,我不知道如何在Date对象中设置时区。例如,Feb 28 2013 7:00 PM ET,我可以var mydate = new Date();mydate.setFullYear(2013);mydate.setMonth(02);mydate.setDate(28);mydate.setHours(7);mydate.setMinutes(00);据我所知,我可以设置UTC时间或当地时间。但是,我如何在另一个时区设置时间?我试图使用添加/减去UTC的偏移量,但我不知道如何应对夏令时。我不确定我是否正朝着正确的方向前进。如何在javascript中将时间从不同的时区转换为当地时间?
查看完整描述

TA贡献1824条经验 获得超6个赞

您可以指定时区偏移量 new Date() ,例如:

new Date('Feb 28 2013 19:00:00 EST')

要么

new Date('Feb 28 2013 19:00:00 GMT-0500')

由于 Date 存储UTC时间(即 getTime 以UTC返回),javascript会将时间转换为UTC,当你调用 toString javascript之类的东西时会将UTC时间转换为浏览器的本地时区并在本地时区返回字符串,即如果我正在使用 UTC+8

> new Date('Feb 28 2013 19:00:00 GMT-0500').toString()< "Fri Mar 01 2013 08:00:00 GMT+0800 (CST)"

您也可以使用常规 getHours/Minute/Second 方法:

> new Date('Feb 28 2013 19:00:00 GMT-0500').getHours()< 8

(这 8 意味着在时间转换为我的当地时间之后 - UTC+8 小时数是 8 。)


查看完整回答

TA贡献1830条经验 获得超9个赞

正如马特约翰逊所说

如果您可以将使用限制为现代Web浏览器,则现在可以在不使用任何特殊库的情况下执行以下操作:

new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

这不是一个全面的解决方案,但它适用于仅需要输出转换的许多场景(从UTC或本地时间到特定时区,但不是另一个方向)。

因此,虽然浏览器在创建日期时无法读取IANA时区,或者有任何方法可以更改现有Date对象的时区,但似乎有一个黑客攻击:

  function changeTimezone(date,ianatz) {
     // suppose the date is 12:00 UTC
     var invdate = new Date(date.toLocaleString('en-US', { 
        timeZone: ianatz 
     // then invdate will be 07:00 in Toronto
     // and the diff is 5 hours
     var diff = date.getTime()-invdate.getTime();
     // so 12:00 in Toronto is 17:00 UTC
     return new Date(date.getTime()+diff);
   }

用法

var there = new Date(when);var here = changeTimezone(there,"America/Toronto");


查看完整回答