簡體   English   中英

在“America/New_York”中將 javascript 日期初始化為中午

[英]Initialize javascript Date to noon in "America/New_York"

我有一個時區作為IANA 時區列表中的規范名稱(例如“America/New_York”)。 我沒有 GMT+ 值,它隨着夏令時的變化而變化,我不想考慮。

我在目標時區有一個我想要的時間,例如 2000 年 7 月 12 日中午。

如何將 javascript 日期初始化為那個時間?

對於這種類型的轉換,最好使用專用的日期/時間庫,例如luxon

我們在所需的時區創建一個 DateTime object,然后轉換為本地。

DateTime object 可以使用.toJSDate() 轉換為 JavaScript 日期。

 const { DateTime } = luxon; const zone = 'America/New_York'; const obj = { year: 2000, month: 7, day: 12, hour: 12 }; const timeInZone = DateTime.fromObject(obj, { zone }); const localtime = timeInZone.toLocal(); console.log('Time in zone:', timeInZone.toString()); console.log('Local time: ', localtime.toString()); console.log('Local time (JSDate):', localtime.toJSDate().toString());
 .as-console-wrapper { max-height: 100%;important }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/3.0.1/luxon.min.js" integrity="sha512-6ZJuab/UnRq1muTChgrVxJhSgygmL2GMLVmSJN7pcBEqJ1dWPbqN9CiZ6U3HrcApTIJsLnMgXYBYgtVkJ8fWiw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

可以在原版 JavaScript 中完成,但要尷尬得多。

我們必須為給定時區的時間搜索相應的 UTC 時間。

一旦我們有了這個,我們就可以在當地時間顯示。

 function convertToLocal(date, timeZone) { const dt = Date.parse(toIso(date) + 'Z'); // Test the entire range of offsets for(let offsetMinutes = -900; offsetMinutes <= 900; offsetMinutes += 15) { const test = new Date(dt + offsetMinutes * 60000); if (toIso(date) === toIso(test, timeZone)) { return test; } } } function toIso(date, timeZone) { const opt = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', fractionalSecondDigits: 3, timeZone }; return new Date(date).toLocaleString('sv', opt).replace(' ', 'T').replace(',', '.'); } let zone = 'America/New_York' let timeInZone = '2000-07-12T12:00:00.000'; console.log('Time in zone:', timeInZone); console.log('Local time: ', toIso(convertToLocal(timeInZone, zone)));
 .as-console-wrapper { max-height: 100%;important }

暫無
暫無

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

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