簡體   English   中英

將不帶格式的 ISO 字符串轉換為日期 object javascript 為本地日期

[英]Transform ISO string to Date object javascript without format to local date

我正在嘗試將字符串2022-02-01T13:36:57+00:00轉換為 Date object javascript ,它返回我Tue Feb 01 2022 13:36:57而不考慮時區。

但每次我嘗試轉換它返回的日期時: Tue Feb 01 2022 10:36:57 GMT-0300 (Brasilia Standard Time)

我已經嘗試過 moment: let now = moment("2022-02-01T13:36:57+00:00").toDate();

與日期: let now = new Date("2022-02-01T13:36:57+00:00");

也使用 UTC: new Date(Date.UTC(2022, 02, 01, 10, 36, 57))

但他們都給我返回了當地日期(巴西利亞標准時間)

所以,問題是:

如何將此字符串2022-02-01T13:36:57+00:00轉換為日期 object 保持同一天、同一小時等?

您可以實例化您自己的Intl.DateTimeFormat格式化程序,或調用Date.prototype.toLocaleString()

 const dateString = '2022-02-01T13:36:57+00:00', date = new Date(dateString), dateFormatter = new Intl.DateTimeFormat('en-US', { timeZone: 'UTC', weekday: 'short', year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'long', hour12: false }); console.log(`Local date: ${date}`); console.log(` UTC date: ${dateFormatter.format(date).replace(/,/g, '')}`);

時間戳“2022-02-01T13:36:57+00:00”代表了一個獨特的時刻。 如果解析為 Date object,它將創建一個時間值為 1643722617000 的 Date 實例,這是與 1970 年 1 月 1 日 ECMAScript 紀元的偏移量(以毫秒為單位)。

時間戳生成的時間值不受本地設置的影響,如下所示:

  1. 它符合 ECMA-262 支持的格式之一,因此解析由標准指定
  2. 包含固定偏移量

默認的toString方法為主機系統時區中的等效日期和時間生成時間戳,通常稱為本地日期和時間。 它將為每個具有不同偏移量的主機生成不同的日期和時間,但它們都將代表完全相同的時間點。

例如

 let timestamp = '2022-02-01T13:36:57+00:00'; let date = new Date(timestamp); ['UTC','America/Sao_Paulo','Asia/Kolkata'].forEach( loc => console.log(`${date.toLocaleString('default',{timeZone:loc})} - ${loc}`) )

如果您希望將時間戳解析為本地時間戳(並且只有在您知道自己在做什么並且有充分理由這樣做的情況下才應該這樣做)然后刪除偏移量並解析其余部分:

 let timestamp = '2022-02-01T13:36:57+00:00'; let date = new Date(timestamp.substring(0,19)); console.log(date.toString());

請注意,生成的 Date 代表每個具有不同偏移量的主機的不同時刻,並且每個此類日期實例將具有不同的時間值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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