Moment.js 是一個在 JavaScript 中處理日期非常有幫助的庫。

Moment.js 是一個非常棒的 JavaScript 库,可以幫助你處理日期,不管是在瀏覽器上還是在 Node.js 中都可以使用。

這篇文章旨在解釋這個庫的基本知識和最常見的用法。

安裝

你可以直接在你的頁面中使用 script 標籤引入它,從 unpkg.com:

<script src="https://unpkg.com/moment" />

或者使用 npm 安裝:

npm install moment

如果你使用 npm 安裝,需要用 import 引入這個包(使用 ES 模块):

import moment from 'moment'

或者用 require 引入它(使用 CommonJS):

const moment = require('moment')

獲取當前日期和時間

const date = moment()

解析日期

你可以通過傳遞一個字符串給 moment 對象來初始化它。

const date = moment(string)

它可以接受任意字符串,按照以下順序解析:

ISO 8601 絕對是最方便的。這是一個格式參考:

格式 意義 範例
YYYY 4 位數年份 2018
YY 2 位數年份 18
M 2 位數月份,忽略前導 0 7
MM 2 位數月份 07
MMM 3 字母月份名稱 Jul
MMMM 完整的月份名稱 July
dddd 完整的星期名稱 Sunday
gggg 4 位數年份的星期 2018
gg 2 位數年份的星期 18
w 不帶前導零的一年中的星期數 18
ww 帶有前導零的一年中的星期數 18
e 星期的第幾天,從 0 開始 4
D 2 位數的日期,忽略前導 0 9
DD 2 位數的日期 09
Do 帶序數的日期 9th
T 表示時間部分的開始
HH 2 位數的小時(24 小時制),從 0 到 23 22
H 2 位數的小時(24 小時制),從 0 到 23,不帶前導 0 22
kk 2 位數的小時(24 小時制),從 1 到 24 23
k 2 位數的小時(24 小時制),從 1 到 24,不帶前導 0 23
a/A 上午 或者 下午 下午
hh 2 位數的小時(12 小時制) 11
mm 2 位數的分鐘 22
ss 2 位數的秒數 40
s 2 位數的秒數,不帶前導零 40
S 1 位數的毫秒數 1
SS 2 位數的毫秒數 12
SSS 3 位數的毫秒數 123
Z 時區 +02:00
x 毫秒級的 UNIX 時間戳 1410432140575

設置日期

格式化日期

當你想要輸出普通的 JavaScript Date 對象的內容時,你只有很少的選擇來確定格式。你只能使用內置的方法,使用它們來組成你想要的日期。

Moment 提供了一個方便的方法來根據你的需要格式化日期,使用 format() 方法:

date.format(string)

字符串格式接受和我在“解析日期”部分中描述的相同的格式。

例如:

moment().format("YYYY Do MM")

Moment 提供了一些常量,你可以使用它們來代替自己編寫格式:

常量 格式 範例
moment.HTML5_FMT.DATETIME_LOCAL YYYY-MM-DDTHH:mm 2017-12-14T16:34
moment.HTML5_FMT.DATETIME_LOCAL_SECONDS YYYY-MM-DDTHH:mm:ss 2017-12-14T16:34:10
moment.HTML5_FMT.DATETIME_LOCAL_MS YYYY-MM-DDTHH:mm:ss.SSS 2017-12-14T16:34:10.234
moment.HTML5_FMT.DATE YYYY-MM-DD 2017-12-14
moment.HTML5_FMT.TIME HH:mm 16:34
moment.HTML5_FMT.TIME_SECONDS HH:mm:ss 16:34:10
moment.HTML5_FMT.TIME_MS HH:mm:ss.SSS 16:34:10.234
moment.HTML5_FMT.WEEK YYYY-[W]WW 2017-W50
moment.HTML5_FMT.MONTH YYYY-MM 2017-12

驗證日期

可以使用 isValid() 方法來檢查任何一個日期是否有效:

moment('2018-13-23').isValid() //false
moment('2018-11-23').isValid() //true

過去和未來的時間

使用 fromNow()。字符串會被本地化:

moment('2016-11-23').fromNow() //2 年前
moment('2018-05-23').fromNow() //一個月前
moment('2018-11-23').fromNow() //在 5 個月內

如果你給 fromNow() 傳遞 true,它只顯示差異,而不涉及將來或過去。

moment('2016-11-23').fromNow(true) //2 年
moment('2018-05-23').fromNow(true) //一個月
moment('2018-11-23').fromNow(true) //5 個月

操作日期

你可以對日期添加或減去任意數量的時間:

moment('2016-11-23').add(1, 'years')
moment('2016-11-23').subtract(1, 'years')

可以使用以下值:

  • years
  • quarters
  • months
  • weeks
  • days
  • hours
  • minutes
  • seconds
  • milliseconds