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

如何将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中将时间从不同的时区转换为当地时间?


慕哥9229398
浏览 5463回答 4
4回答

慕妹3242003

您可以指定时区偏移量new Date(),例如:new&nbsp;Date('Feb&nbsp;28&nbsp;2013&nbsp;19:00:00&nbsp;EST')要么new&nbsp;Date('Feb&nbsp;28&nbsp;2013&nbsp;19:00:00&nbsp;GMT-0500')由于Date存储UTC时间(即getTime以UTC返回),javascript会将时间转换为UTC,当你调用toStringjavascript之类的东西时会将UTC时间转换为浏览器的本地时区并在本地时区返回字符串,即如果我正在使用UTC+8:>&nbsp;new&nbsp;Date('Feb&nbsp;28&nbsp;2013&nbsp;19:00:00&nbsp;GMT-0500').toString()<&nbsp;"Fri&nbsp;Mar&nbsp;01&nbsp;2013&nbsp;08:00:00&nbsp;GMT+0800&nbsp;(CST)"您也可以使用常规getHours/Minute/Second方法:>&nbsp;new&nbsp;Date('Feb&nbsp;28&nbsp;2013&nbsp;19:00:00&nbsp;GMT-0500').getHours()<&nbsp;8(这8意味着在时间转换为我的当地时间之后 -&nbsp;UTC+8小时数是8。)

慕标琳琳

正如马特约翰逊所说如果您可以将使用限制为现代Web浏览器,则现在可以在不使用任何特殊库的情况下执行以下操作:new Date().toLocaleString("en-US", {timeZone: "America/New_York"})这不是一个全面的解决方案,但它适用于仅需要输出转换的许多场景(从UTC或本地时间到特定时区,但不是另一个方向)。因此,虽然浏览器在创建日期时无法读取IANA时区,或者有任何方法可以更改现有Date对象的时区,但似乎有一个黑客攻击:&nbsp;&nbsp;function&nbsp;changeTimezone(date,ianatz)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;suppose&nbsp;the&nbsp;date&nbsp;is&nbsp;12:00&nbsp;UTC &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;invdate&nbsp;=&nbsp;new&nbsp;Date(date.toLocaleString('en-US',&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeZone:&nbsp;ianatz&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;then&nbsp;invdate&nbsp;will&nbsp;be&nbsp;07:00&nbsp;in&nbsp;Toronto &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;and&nbsp;the&nbsp;diff&nbsp;is&nbsp;5&nbsp;hours &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;diff&nbsp;=&nbsp;date.getTime()-invdate.getTime(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;so&nbsp;12:00&nbsp;in&nbsp;Toronto&nbsp;is&nbsp;17:00&nbsp;UTC &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Date(date.getTime()+diff); &nbsp;&nbsp;&nbsp;}用法var&nbsp;there&nbsp;=&nbsp;new&nbsp;Date(when);var&nbsp;here&nbsp;=&nbsp;changeTimezone(there,"America/Toronto");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript