为了账号安全,请及时绑定邮箱和手机立即绑定

如何将JavaScript日期初始化为特定时区

如何将JavaScript日期初始化为特定时区

慕哥9229398 2019-05-27 12:53:27
如何将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中将时间从不同的时区转换为当地时间?
查看完整描述

4 回答

?
慕妹3242003

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,当你调用toStringjavascript之类的东西时会将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。)


查看完整回答
反对 回复 2019-05-27
?
慕标琳琳

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");


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 5462 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信