![](/img/trans.png)
[英]javascript date validation (length 2 digit month, day, 4 digit year)
[英]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.