[英]Convert Date to another timezone in JavaScript and Print with Correct Timezone
我需要將本地時區轉換為太平洋/洛杉磯。
例如,如果用戶在夏威夷
代碼:取自https://stackoverflow.com/a/54127122/15358601
function convertTZ(date, tzString) {
return new Date((typeof date === "string" ? New Date(date) : date).toLocaleString("en-US", {timeZone: tzString}));
}
convertTZ(new Date(), "America/Los_Angeles")
2021 年 3 月 14 日星期日 17:01:59 GMT-1000(夏威夷-阿留申標准時間){}
它仍然打印與夏威夷的決賽。 我需要美國/洛杉磯展覽,而不是夏威夷。 (但是它仍然打印正確的新小時和分鍾,只是顯示 label 不正確)怎么辦?
該解決方案也適用於其他時區,分別打印它的其他時區,例如:美國/紐約、歐洲/倫敦、歐洲/巴黎等,
一些東西:
您為convertTZ
鏈接到的答案中的方法存在缺陷。 不應使用Date
構造函數解析 toLocalString 的toLocalString
。 請閱讀該答案之后的評論。
Date
object不能轉換到另一個時區,因為它實際上不在任何時區。 Date
object 封裝的唯一內容是它的 Unix 時間戳,可以通過.valueOf()
、 .getTime()
或任何將其強制為Number
的機制看到。 此類值始終基於 UTC。
當您看到來自Date
object 的本地時間或時區時,系統的本地時區將應用於基於內部 UTC 的 Unix 時間戳以創建 output。 本地時區不能以編程方式從 JavaScript(或 TypeScript)更改,也不能基於每個對象進行更改。
不要嘗試將一個時區的Date
object 轉換為另一個時區的Date
object,而是要認識到所有Date
對象本質上都是 UTC。 因此,您可以創建一個位於不同時區的字符串(例如,使用帶有timeZone
選項的toLocaleString
),但不能從該字符串創建新的Date
object。 如果您想要一個實際上可以設置為不同時區的 object,請考慮Luxon 。 如果你需要一個沒有庫的解決方案,你有一天可以使用TC39 臨時提案中的ZonedDateTime
,它最終將成為 ECMAScript 的一部分。
請注意在Date
object 上調用console.log
。 ECMAScript 規范和 WhatWG 控制台規范都沒有定義這種調用的行為。 這是未定義的行為。 在某些環境中,記錄的字符串 output 與在Date
object 上調用.toString()
相同 - 這將提供與Date
對象的時間戳等效的本地時間,以及本地時區的顯示名稱。 其他環境將顯示與調用.toISOString()
相同的 output ,這將提供 UTC 時間戳的 ISO-8601 表示。 不要記錄Date
對象,而是自己調用這兩個函數之一並記錄 output。
function convertTZ() {
return new Date().toLocaleString('en-US', { timeZone: "America/Los_Angeles" });
}
console.log(convertTZ());
//Second way
//Hoepfully that's going to be the code that you need.You can change the way that you want to see the date.
function convertTZ() {
return new Date().toLocaleString('en-US', {
timeZone: "America/Los_Angeles" ,
day: "numeric",
month: "short",
year: "numeric",
hour: "numeric",
minute: "2-digit"
});
}
console.log(convertTZ(),' America/Los Angeles');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.