在js的程式哩,對於時間格式處理解析與驗證可以使用momentjs,
下面簡要整理
- 處理不同版本js的Date對於字串解析的不一致 var a = new Date(‘2016-01-01’); ES5(解成UTC), ES2015(解成local time)
- mutable: t.add(1, ‘days’) 這樣會直接影響到t,如果要重複操作時 t.clone().add(1, ‘days’), value可為負數
- 避免在操作 add傳入小數點
- 處理timezone相關問題時要注意DST, daylight saving time
- 儘量使用.format(…)顯示描述轉成字串的格式
- moment.utc(), moment().utc() 可以理解成目前是UTC timezone
- moment距離 x.diff(y) => x減去y 回傳 milliseconds
- moment.duration(milliseconds number) 再用 asDays()等的function轉單位
解析時間:
moment()
moment(Date)
moment(unix ms)
moment.unix(unix secs)
moment(字串str) //解析: 檢查ISO 8601 -> 檢查rfc 2822 -> new Date(str)
moment(str, format)
moment(str, format, strict)
產生字串 moment().format(…)
moment.utc().format(‘ddd, DD MMM YYYY HH:mm:ss [GMT]’); //rfc 2822
moment().toISOString() //=> “2018-10-11T03:44:53.612Z”
轉成其他物件或格式
moment().valueOf(); // (get unix ms), moment().unix(); (get unix secs)
moment().toDate(); //(get js Date)
moment().toArray(); // => [2018, 9, 11, 11, 44, 10, 780]
moment().toObject();
{ //moment.toObject() date: 11, hours: 11, milliseconds: 948, minutes: 45, months: 9, seconds: 26, years: 2018, }
format驗證
moment().isValid();
註: 時間有關rfc: rfc 2822, 3339