📅  最后修改于: 2023-12-03 15:07:53.469000             🧑  作者: Mango
在跨国家或跨时区的项目中,获取不同国家的本地时间是非常常见的需求。在 JavaScript 中,可以通过内置的 Date
对象和 toLocaleString
方法来实现这个功能。
我们可以先通过 new Date()
来获取当前本地时间,然后用 toLocaleString()
方法将时间转化成本地格式。
const localTime = new Date().toLocaleString();
console.log(localTime); // 输出本地时间的字符串格式
JavaScript 中没有直接获取指定时区时间的方法,不过我们可以通过设置 Date
对象的 UTC 时间来获取指定时区时间。我们可以计算出本地时间和 UTC 时间之间的差距,然后加上或减去时差来获取指定时区的时间。
const localTime = new Date(); // 获取本地时间
const offset = -(localTime.getTimezoneOffset() / 60); // 计算本地时间和 UTC 时间之间的差距
const utcTime = new Date(localTime.getTime() + offset * 3600 * 1000); // 计算 UTC 时间
const specifiedTimeZoneTime = utcTime.toLocaleString('en-US', { timeZone: 'America/New_York' }); // 获取指定时区的时间
console.log(specifiedTimeZoneTime); // 输出指定时区时间的字符串格式
在上面的代码中,我们用 getTimezoneOffset()
方法获取本地时间和 UTC 时间之间的时差,然后乘以 3600 毫秒(1 小时)来计算当前时区相对于 UTC 时间的小时差。然后用 new Date()
创建一个新的 UTC 时间对象,并加上或减去小时差来获得指定时区的时间。最后用 toLocaleString()
方法将时间转化成指定时区格式。
需要注意的是,toLocaleString()
方法的第二个参数 { timeZone: 'America/New_York' }
中,'America/New_York'
是 IANA 时区标识符,可以根据实际需要来更改。
如果需要获取多个国家的时间,可以将不同国家的时区标识符放入一个数组中,然后使用 Array.map()
方法来遍历数组中的时区标识符,获取各个国家的时间。
const timeZones = ['Asia/Shanghai', 'Europe/London', 'America/New_York'];
const times = timeZones.map((timeZone) =>
new Date(new Date().getTime() + -(new Date().getTimezoneOffset() * 60000))
.toLocaleString('en-US', { timeZone })
);
console.log(times); // 输出各个国家时间的字符串格式
上面的代码中,我们先定义一个包含多个国家时区标识符的数组 timeZones
,然后使用 Array.map()
方法和另一个箭头函数,来遍历数组中的时区标识符,获取各个国家的时间。在每次遍历时,我们用 new Date().getTime()
获取当前时间的时间戳,然后用 getTimezoneOffset()
方法获取本地时间和 UTC 时间之间的时差,乘以 60000 毫秒(1 分钟)后,加到时间戳上,可以得到相应时区的时间戳。最后,将时间转化成指定时区的格式,存入一个数组 times
中。最终,使用 console.log()
输出整个数组。
通过 Date
对象和 toLocaleString()
方法,我们可以轻松获取不同国家的时间。以上代码片段不仅仅适用于 JavaScript,也适用于 TypeScript,ES6 等相关技术领域。希望这篇介绍对你有所帮助!