📜  在javascript中获取不同的国家时间(1)

📅  最后修改于: 2023-12-03 15:07:53.469000             🧑  作者: Mango

在 JavaScript 中获取不同的国家时间

在跨国家或跨时区的项目中,获取不同国家的本地时间是非常常见的需求。在 JavaScript 中,可以通过内置的 Date 对象和 toLocaleString 方法来实现这个功能。

1. 获取本地时间

我们可以先通过 new Date() 来获取当前本地时间,然后用 toLocaleString() 方法将时间转化成本地格式。

const localTime = new Date().toLocaleString();
console.log(localTime); // 输出本地时间的字符串格式
2. 获取指定时区的时间

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 时区标识符,可以根据实际需要来更改。

3. 获取多个国家的时间

如果需要获取多个国家的时间,可以将不同国家的时区标识符放入一个数组中,然后使用 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 等相关技术领域。希望这篇介绍对你有所帮助!