簡體   English   中英

將日期轉換為 JavaScript 中的另一個時區並使用正確的時區打印

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM