將 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