如何将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,当你调用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");
添加回答
举报
0/150
提交
取消