簡體   English   中英

如何根據我的時區以特定格式獲取日期

[英]How to get Date according to my timezone with specific format

我需要格式化 JavaScript 日期 object。 它應該顯示以色列日期,格式為:yyyy/mm/dd。

我試過這個 -

const locale = 'he-IL';
const dateOptions =  {timeZone:'Asia/Jerusalem',year: 'numeric', month: '2-digit', day: '2-digit'};
console.log( new Date(record.value).toLocaleDateString(locale, dateOptions) )

我從本地計算機獲取-

=> 2020-06-22

從服務器 - 托管在 Amazon Cloud 上:

=> 06/22/2020

我嘗試使用其他語言環境,但結果不同 - 可能取決於服務器語言環境。

ECMAScript 日期對象只是一個時間值,與 1970-01-01T00:00:00Z 之間的偏移量(以毫秒為單位),范圍約為 ±285,000 年,因此它們實際上是 UTC。

時間值是在創建日期實例時根據傳遞給構造函數的值計算的。 如果未傳遞任何值,則根據系統時鍾和時區設置計算當前時間值。 這是 Date object 具有的唯一數據值。 日期實例的所有其他數據值都是根據時間值計算的(例如getMonthgetHourstoString等,包括它們的 UTC 等價物)或從系統中檢索(例如getTimezoneOffset )。

所以你不能指定一個日期的時區,因為它沒有。 使用非 UTC 方法時使用當前系統時區設置,否則它們也會被忽略。

如果要獲取特定地點(例如以色列)的時間戳,可以將系統設置設置為合適的位置並使用非 UTC 方法。 或者,您可以使用Intl.DateTimeFormat實例的timeZone選項使用formatToParts生成一些適當的值,然后根據需要對其進行格式化。

唯一棘手的部分是從formatToParts返回的數組中獲取值,例如,以下使用reduce創建一個在格式化時更方便使用的部件object:

 let parts = new Intl.DateTimeFormat('en', { year: 'numeric', month: '2-digit', day: '2-digit', timeZone:'Asia/Jerusalem'}).formatToParts(new Date()).reduce((acc, part) => { acc[part.type] = part.value; return acc; }, Object.create(null)); let timeStamp = `${parts.year}/${parts.month}/${parts.day}`; console.log(timeStamp);

另一種方法是 select 一種語言,其中的部分按您想要的順序排列,然后替換分隔符。 它的風險更大,因為不同的實現可能對與特定語言或方言相關的格式有不同的想法,例如部分順序和前導零,例如

 console.log( new Date().toLocaleDateString('he-IL', {timeZone:'Asia/Jerusalem'}).replace(/\D/g,'/') ); console.log( new Date().toLocaleDateString('en-CA', {timeZone:'Asia/Jerusalem'}).replace(/\D/g,'/') );

暫無
暫無

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

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