我正在寻找一种将一个时区中的日期转换为另一个时区的函数。
它需要两个参数,
- 日期(格式为“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 参考。
注意警告:上面的函数依赖于解析 toLocaleString 结果来工作,它是在en-US
locale 中格式化的日期字符串,例如"4/20/2012, 5:10:30 PM"
. 每个浏览器可能不接受en-US
格式化的日期字符串到它的 Date 构造函数,它可能会返回意外的结果(它可能会忽略夏令时)。
目前所有现代浏览器都接受这种格式并正确计算夏令时,它可能不适用于旧浏览器和/或异国浏览器。
旁注:如果现代浏览器有 toLocaleDate 函数会很棒,所以我们不必使用这个 hacky 解决方法。
对于moment.js用户,您现在可以使用moment-timezone。使用它,您的函数将如下所示:
function toTimeZone(time, zone) {
var format = 'YYYY/MM/DD HH:mm:ss ZZ';
return moment(time, format).tz(zone).format(format);
}
大多数浏览器都支持带参数的toLocaleString函数,较旧的浏览器通常会忽略这些参数。
const str = new Date().toLocaleString('en-US', { timeZone: 'Asia/Jakarta' });
console.log(str);
无耻地从:http : //www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329窃取
/**
* function to calculate local time
* in a different city
* given the city's UTC offset
*/
function calcTime(city, offset) {
// create Date object for current location
var d = new Date();
// get UTC time in msec
var utc = d.getTime();
// create new Date object for different city
// using supplied offset
var nd = new Date(utc + (3600000*offset));
// return time as a string
return "The local time in " + city + " is " + nd.toLocaleString();
}
此函数可用于通过提供城市/国家名称和偏移值来计算时区值
好的,找到了!
我正在使用timezone-js。这是代码:
var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", 'Europe/London');
dt.setTimezone("Asia/Jakarta");
console.debug(dt); //return formatted date-time in asia/jakarta