在 JavaScript 中将日期转换为其他时区
2022-08-29 23:14:13
我正在寻找一个将一个时区中的日期转换为另一个时区的函数。
它需要两个参数,
- 日期(格式为“2012/04/10 10:10:30 +0000”)
- 时区字符串(“亚洲/雅加达”)
时区字符串在 http://en.wikipedia.org/wiki/Zone.tab
有没有一种简单的方法来做到这一点?
我正在寻找一个将一个时区中的日期转换为另一个时区的函数。
它需要两个参数,
时区字符串在 http://en.wikipedia.org/wiki/Zone.tab
有没有一种简单的方法来做到这一点?
这是单行:
function convertTZ(date, tzString) {
return new Date((typeof date === "string" ? new Date(date) : date).toLocaleString("en-US", {timeZone: tzString}));
}
// usage: Asia/Jakarta is GMT+7
convertTZ("2012/04/20 10:10:30 +0000", "Asia/Jakarta") // Tue Apr 20 2012 17:10:30 GMT+0700 (Western Indonesia Time)
// Resulting value is regular Date() object
const convertedDate = convertTZ("2012/04/20 10:10:30 +0000", "Asia/Jakarta")
convertedDate.getHours(); // 17
// Bonus: You can also put Date object to first arg
const date = new Date()
convertTZ(date, "Asia/Jakarta") // current date-time in jakarta.
这是 MDN 参考。
注意注意:上面的函数通过依赖于解析到LocaleString结果来工作,该结果是以locale格式设置的日期字符串,例如。每个浏览器可能不接受其 Date 构造函数的格式化日期字符串,并且可能会返回意外结果(可能会忽略夏令时)。en-US
"4/20/2012, 5:10:30 PM"
en-US
目前,所有现代浏览器都接受此格式并正确计算夏令时,它可能不适用于较旧的浏览器和/或异国情调的浏览器。
旁注:如果现代浏览器必须使用LocaleDate功能,那就太好了,这样我们就不必使用这个黑客工作了。