簡體   English   中英

使用 toISOString javascript 將一位數日月轉換為兩位數

[英]Convert one digit day month to 2 digit with toISOString javascript

您好,我想使用 toISOString 將 'YYYY-MD' 轉換為 'YYYY-MM-DD' 但是當我設置一位數DAy時,返回值不太正確。

const date = new Date('1991-1-1').toISOString().substr(0, 10);
//"1990-12-31"

或者

const date = new Date('1991-01-01').toISOString().substr(0, 10);

//"1990-12-31"

但我想要“1990-01-01”,我知道我可以使用一些 getMonth 等等,我正在尋找一個簡單的本地解決方案。 謝謝

使用 moment.js 怎么樣?

const date = moment('1991-1-1').format('Y-MM-DD'); // 1991-01-01

“1991-1-1”不是 ECMAScript 支持的格式,因此解析取決於實現,它可能被解析為 UTC、本地或視為無效日期。 new Date('1991-1-1')至少在 Safari 中返回無效日期。

如果您只想在單個數字上添加前導零,請這樣做並避免內置解析器的變幻莫測:

 // Using split + join console.log( '1991-1-1'.split('-').map(c => (c<10?'0':'') + +c).join('-') ); // Using replace console.log( '1991-1-1'.replace(/\d+/g, c => (c<10?'0':'') + +c) );

附言

Safari 也錯誤地將 1991-01-01 視為本地時間,而不是 UTC,因此對於具有負時區偏移(在 EMCAScript 中為正)的用戶, new Date('1991-01-01')返回 1990-12-31 的日期。 請參閱為什么 Date.parse 給出不正確的結果?

如果您確實必須使用 Date,則手動將其解析為 UTC 並使用toISOString 這避免了內置解析器和時區偏移的問題。

 // Change YYYY-MD to YYYY-MM-DD // Separator can be any non-digit character function reformatDate(s) { let [y,m,d] = s.split(/\D/); return new Date(Date.UTC(y, m-1, d)).toISOString().slice(0,10); } console.log(reformatDate('1991-1-1'));

暫無
暫無

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

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