JavaScript 时间操作必备类库:Moment.js
Moment.js是一个很棒的JavaScript库,可帮助您在浏览器和Node.js中管理日期。
本文旨在解释该库的基础知识和最常用的用法。
安装
您可以使用脚本标签直接从unpkg.com将其包含在页面中:
<script src="https://unpkg.com/moment" />
或使用 npm:
npm install moment
如果使用npm安装,则需要导入软件包(使用 ES Modules):
import moment from 'moment'
或要求使用(CommonJS):
const moment = require('moment')
获取当前日期和时间
const date = moment()
解析日期
可以通过传递日期的字符串来初始化 Moment 对象:
const date = moment(string)
它接受任何字符串,按照(顺序)解析:
- ISO 8601
- The RFC 2822 时间日期格式
- 日期对象接受的格式
ISO 8601肯定是最方便的。这是格式参考:
格式 | 含义 | 例子 |
---|---|---|
YYYY | 4位数字年份 | 2018 |
YY | 2位数字年份 | 18 |
M | 2位数字月份号,省略前导0 | 7 |
MM | 2位数字月号 | 07 |
MMM | 3个字母的月份名称 | 7月 |
MMMM | 全月名称 | 七月 |
dddd | 全天名称 | 周日 |
gggg | 4位数字,星期 | 2018 |
gg | 两位数字星期 | 18 |
w | 一年中的周没有前导零 | 18 |
ww | 一年中以零开头的一周 | 18 |
e | 星期几,从0开始 | 4 |
D | 2位天数,省略前导0 | 9 |
DD | 2位数字的天数 | 09 |
Do | 天序号 | 9号 |
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 | am 或pm |
pm |
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() // 两年前
moment('2018-05-23').fromNow() // 一个月以前
moment('2018-11-23').fromNow() // 五分钟前
如果您将true
传递给 fromNow()
,它将仅显示差异,而不会引用将来/过去。
moment('2016-11-23').fromNow(true) //2 年
moment('2018-05-23').fromNow(true) //1 个月
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
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: