问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

JS获取指定时区时间的多种方法

创作时间:
作者:
@小白创作中心

JS获取指定时区时间的多种方法

引用
1
来源
1.
https://docs.pingcode.com/baike/3653369

在JavaScript中获取指定时区的时间是一个常见的需求,特别是在开发涉及国际化和时区转换的应用程序时。本文将详细介绍几种实现这一功能的方法,并提供具体的代码示例。

使用Intl.DateTimeFormat

Intl.DateTimeFormat 是一个构造函数,可以用来格式化日期和时间。它可以根据指定的区域设置和选项格式化日期和时间。下面是如何使用 Intl.DateTimeFormat 来获取指定时区的时间:

function getTimeInTimeZone(timeZone) {
    const options = {  
        timeZone: timeZone,  
        year: 'numeric',  
        month: 'numeric',  
        day: 'numeric',  
        hour: 'numeric',  
        minute: 'numeric',  
        second: 'numeric',  
    };  
    const formatter = new Intl.DateTimeFormat([], options);  
    return formatter.format(new Date());  
}  
console.log(getTimeInTimeZone('America/New_York'));  

使用Date对象和toLocaleString

JavaScript的 Date 对象自带的 toLocaleString 方法也可以用来获取指定时区的时间。通过设置 timeZone 选项,我们可以轻松获得不同时区的日期和时间。

function getTimeInTimeZone(timeZone) {
    return new Date().toLocaleString('en-US', { timeZone: timeZone });  
}  
console.log(getTimeInTimeZone('Europe/London'));  

详细描述:toLocaleString方法

toLocaleString 方法是JavaScript Date 对象的一个方法,它返回日期对象的字符串表示,字符串的格式因不同的区域设置而异。通过传递一个包含时间选项的对象,我们可以指定时区、日期和时间的格式。

const date = new Date();
const options = {  
    timeZone: 'Asia/Tokyo',  
    year: 'numeric',  
    month: 'long',  
    day: 'numeric',  
    hour: 'numeric',  
    minute: 'numeric',  
    second: 'numeric',  
    hour12: false  
};  
console.log(date.toLocaleString('en-US', options));  

使用moment-timezone库

moment-timezone 是一个强大的库,可以用来处理时区相关的操作。首先,你需要安装 moment-timezone 库。

npm install moment-timezone

然后,你可以使用下面的代码来获取指定时区的时间。

const moment = require('moment-timezone');
function getTimeInTimeZone(timeZone) {  
    return moment().tz(timeZone).format('YYYY-MM-DD HH:mm:ss');  
}  
console.log(getTimeInTimeZone('Australia/Sydney'));  

使用Date对象的getTimezoneOffset方法

虽然 getTimezoneOffset 方法不能直接获取指定时区的时间,但它可以用来计算两个时区之间的时间差,从而间接地帮助我们获取指定时区的时间。

function getTimeInTimeZone(timeZone) {
    const date = new Date();  
    const localOffset = date.getTimezoneOffset() * 60000;  
    const utc = date.getTime() + localOffset;  
    const offset = getOffsetByTimeZone(timeZone);  
    return new Date(utc + offset * 3600000);  
}  
function getOffsetByTimeZone(timeZone) {  
    const offsets = {  
        'UTC': 0,  
        'America/New_York': -5,  
        'Europe/London': 0,  
        'Asia/Tokyo': 9,  
        'Australia/Sydney': 11  
    };  
    return offsets[timeZone] || 0;  
}  
console.log(getTimeInTimeZone('Asia/Tokyo'));  

使用第三方API

如果你不想在客户端处理时区转换,可以使用一些免费的API服务,如World Time API。

const fetch = require('node-fetch');
async function getTimeInTimeZone(timeZone) {  
    const response = await fetch(`http://worldtimeapi.org/api/timezone/${timeZone}`);  
    const data = await response.json();  
    return data.datetime;  
}  
getTimeInTimeZone('Europe/Paris').then(console.log);  

通过以上几种方法,你可以轻松地在JavaScript中获取指定时区的时间。选择最适合你需求的方法,使你的开发工作更加高效。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号