如何将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");
查看完整回答