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
- RFC 2822 日期時間格式
- Date 對象接受的格式
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