跳至主要内容

[note] moment-js 筆記

keywords: time, date, datetime
npm install moment

momentJS @ official

選擇使用 momentJS 前建議可以考慮更輕量的套件,可參考 Why you shouldn't use Moment.jsYou Don't Need MomentJS

目錄

[TOC]

API

Parse

// parse time
var now = moment() // moment("2018-01-03T12:07:48.350")
var day = moment('2017-01-06') // moment("2017-01-06T00:00:00.000")

Get and Set

moment().year(2017).month(3).date(12); // moment("2017-04-12T13:58:34.641")
moment().year(2018).month(0).date(1).hours(0).minutes(0).seconds(0).milliseconds(0); // moment("2018-01-01T00:00:00.000")

Display

keywords: format, escape

Format Table @ MomentJS

moment().format(); // '2018-01-03T14:03:42+08:00' (ISO 8601)
moment().format('HHmm'); // '1405'
moment().format('YYYYMMDD'); // '20180103'
moment().format('YYYY-MM-DD HH:mm'); // '2018-01-03 14:23'

// escape character
moment().format('[today] dddd'); // 'today Wednesday'
moment().format('today dddd'); // 'to3pmy Wednesday'

跳脫字元

使用 [] 可以將單字跳脫解析:

// escape character
moment().format('[today] dddd'); // 'today Wednesday'
moment().format('today dddd'); // 'to3pmy Wednesday'

Query

keywords: isBefore, isSame, isAfter, isSameOrBefore, isSameOrAfter, isBetween, isLeapYear, 比較時間
# 第二個參數可用來定義比較到哪個位數
moment().isBefore(Moment|String|Number|Date|Array[, String])
// 字串作為參數
moment('2010-10-20').isBefore('2010-10-21'); // true

moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true
// moment 物件作為參數
let momentTime1 = moment().hours(23);
let momentTime2 = moment().hours(22);

momentTime1.isBefore(momentTime2);

Utilities

Keywords: isMoment, isDate, isValid
  • moment.isMoment(<momentObj>):用來檢驗是否為 Moment 的物件
  • moment.isDate(<dateObj>):用來檢驗是否為 JS 的原生日期物件
  • moment(<momentFormat>).isValid():檢驗是否為正確的 moment 格式

i18n

moment.locale('zh-tw'); // 將語系設定到全域
moment().format('YYYY/MM/DD[(]dd[)]HH:mm'); // 2018/02/22(四)16:57
moment().format('LLLL'); // LLLL : 'YYYY年MMMD日ddddAh點mm分',

其它用法可參考 zh-tw @ momentjs-rails

常用功能

取得當下時間

keywords: now
/**
* 取得當下時間
**/
let now = moment();
now.format(); // 2018-02-27T10:18:04+08:00

取得兩時間點差距

keywords: toNow(Boolean), fromNow(Boolean)

toNow()fromNow() 帶入參數 true 時,不會回傳 prefix,因此回傳的時間會一樣:

let theDay = moment('2018-3-12');

moment().format(); // 取得現在時間:2018-02-27T10:30:20+08:00
theDay.fromNow(); // in 13 days
theDay.toNow(); // 13 days ago

theDay.fromNow(true); // 13 days
theDay.toNow(true); // 13 days