将 JavaScript 日期初始化为特定时区
-
使用
Intl.DateTimeFormat和format()方法将 JavaScript 日期初始化为特定时区 -
使用
toLocaleString()方法将 JavaScript 日期初始化为特定时区
本教程教授如何将 JavaScript 日期初始化为特定时区。
JavaScript 的日期对象在内部使用 UTC,但根据操作计算机的本地时间显示输出。日期对象没有任何时区概念。没有声明字符串对象。它只是对自 1970-01-01 00:00:00 UTC 以来经过的毫秒数的度量。在输出时间时,它会自动考虑计算机的本地时区并应用于内部表示。它不适用于不同的时区。因此,我们需要借助函数和外部库来执行此类操作。
使用 Intl.DateTimeFormat 和 format() 方法将 JavaScript 日期初始化为特定时区
JavaScript Intl 对象是 JavaScript 国际化 API 的辅助工具。它为我们提供了许多用于转换日期/时间、字符串和数字的函数。Intl 对象使用 DateTimeFormat 来格式化日期时间字符串。它有一个 format 方法,它使用作为格式化程序参数提供的语言环境和选项获取日期并将其转换为不同的时区。此方法会将日期格式化为所需的时区并将其转换为字符串。
format() 函数采用的参数是日期。我们需要以下参数来形成 Intl.DateTimeFormat 对象:
locales:它是一个包含语言和语言环境标签的字符串数组。通常,它是一个可选参数,但对于我们的目的来说是必需的。要更改时区,我们只需指定 BCP 语言代码和所需的时区。options:它是一个对象,用于指定执行比较的属性。它也是一个可选参数,可用于指定样式和显示单位。一些属性是second、minute、hour、day,、month和year等。
例如:我们可以传递一个选项对象,如 { hour: 'numeric', hour12: false, minute: 'numeric', timeZoneName: 'short'}
function changeTimezone() {
let date = new Date(Date.UTC(2021, 5, 28, 3, 0, 0));
console.log('Date in India: ' + date);
let formatter =
new Intl.DateTimeFormat('en-US', {timeZone: 'America/Denver'});
let usDate = formatter.format(date);
console.log('Date in USA: ' + usDate);
}
输出:
Date in India: Mon Jun 28 2021 08:30:00 GMT+0530 (India Standard Time)
VM1504:7 Date in USA: 6/27/2021
在上面的函数中,我们首先使用 Date() 构造函数创建一个 Date 对象。然后我们使用 Intl.DateTimeFormat 创建一个格式化程序,指定区域设置,即 BCP 语言标签 和我们要转换到的 timeZone。然后我们使用此格式化程序将日期转换为所需的时区。
使用 toLocaleString() 方法将 JavaScript 日期初始化为特定时区
toLocaleString() 方法最常用于更改时区,因为它更易于使用并且可以直接在 Date 上调用。它的工作方式与 Intl.DateTimeFormat 相同。它还接受语言环境字符串和选项作为参数,并返回一个日期根据它们格式化的字符串。这种方法的优点是不像上面的方法是根据国家的时区转换时间并在字符串中返回。
function changeTimezone() {
let date = new Date(Date.UTC(2021, 5, 28, 3, 0, 0));
console.log('Date in India: ' + date);
let usDate = date.toLocaleString('en-US', {timeZone: 'America/New_York'});
console.log('Date in USA: ' + usDate);
}
输出:
Date in India: Mon Jun 28 2021 08:30:00 GMT+0530 (India Standard Time)
Date in USA: 6/27/2021, 11:00:00 PM
在上面的函数中,我们首先使用 Date() 构造函数创建一个 Date 对象。我们在指定 language tag 和 timeZone 的日期上调用 toLocaleString 函数,并将日期/时间转换为不同的时区。
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn