使用Moment.js处理日期

各个浏览器对 Date.parse 的实现不一致,如果需要解析日期字符串,最好使用独立的 js 库。

Moment.js 就是一个解析、验证、操控和显示日期的js库。

项目主页: http://momentjs.com/

Github主页: https://github.com/moment/moment/

安装

Node.js

npminstallmoment
var moment = require('moment');
moment().format();

ES6

npminstallmoment

在使用 Moment.js 的模块中导入 moment。

importmomentfrom 'moment';
moment().format();

下面只介绍最简单的用法,详细用法请参考官方文档。

解析

当前时刻

直接调用,返回表示当前时间的 Moment 对象。等同于 moment ( new Date ( ) )

moment();

解析字符串

moment(String);

先按匹配 ISO 8601,如果没有合适的格式,再使用 new Date ( string ) 创建日期。

moment("2016-11-25")

可以调用 isValid 方法检测日期是否有效。

>moment("not a valid date").isValid()
false

解析提供格式的字符串

moment(String, String);

为了实现精确解析,推荐使用该方法。

moment("2016-11-25T13:41:00 +0000", "YYYY-MM-DDTHH:mm:ss Z")

格式字段如下:

年月日

Input Example Description
YYYY 2014 4 or 2 digit year
YY 14 2 digit year
Y -25 Year with any number of digits and sign
Q 1..4 Quarter of year. Sets month to first month in quarter.
M MM 1..12 Month number
MMM MMMM Jan..December Month name in locale set by moment.locale()
D DD 1..31 Day of month
Do 1st..31st Day of month with ordinal
DDD DDDD 1..365 Day of year
X 1410715640.579 Unix timestamp
x 1410715640579 Unix ms timestamp

Input Example Description
gggg 2014 Locale 4 digit week year
gg 14 Locale 2 digit week year
w ww 1..53 Locale week of year
e 0..6 Locale day of week
ddd dddd Mon...Sunday Day name in locale set by moment.locale()
GGGG 2014 ISO 4 digit week year
GG 14 ISO 2 digit week year
W WW 1..53 ISO week of year
E 1..7 ISO day of week

时分秒及时区

Input Example Description
H HH 0..23 24 hour time
h hh 1..12 12 hour time used with a A .
a A am pm Post or ante meridiem (Note the one character a p are also considered valid)
m mm 0..59 Minutes
s ss 0..59 Seconds
S SS SSS 0..999 Fractional seconds
Z ZZ +12:00 Offset from UTC as +-HH:mm , +-HHmm , or Z

显示

使用本地格式显示或者指定格式

moment.format()
moment.format(String)

解析字符串的格式同样适用,并且format还提供其他格式选项。详情请参看官方文档。

w.format()
"2016-11-25T21:41:00+08:00"
w.format("YYYY-MM-DD HH:mm:ss")
"2016-11-25 21:41:00"

时间做差

Moment.js 可以直接显示时间做差的结果。

>moment().fromNow();
"a few seconds ago"
>moment('2016-11-25 13:00:00').fromNow()
"an hour ago"

详细显示如下表所示:

Range Key Sample Output
0 to 45 seconds s a few seconds ago
45 to 90 seconds m a minute ago
90 seconds to 45 minutes mm 2 minutes ago … 45 minutes ago
45 to 90 minutes h an hour ago
90 minutes to 22 hours hh 2 hours ago … 22 hours ago
22 to 36 hours d a day ago
36 hours to 25 days dd 2 days ago … 25 days ago
25 to 45 days M a month ago
45 to 345 days MM 2 months ago … 11 months ago
345 to 545 days (1.5 years) y a year ago
546 days+ yy 2 years ago … 20 years ago

计算两个时间点的时间差。

moment('2016-11-25 13:00:00').from(moment('2016-11-25 13:10:00'))
"10 minutes ago"

反向做差

moment('2016-11-25 13:00:00').to(moment('2016-11-25 13:10:00'))
"in 10 minutes"

操控

实现对日期的操控,比如一周前的时间:

moment().format()
"2016-11-25T14:41:13+08:00"
moment().subtract(1,'weeks').format()
"2016-11-18T14:41:26+08:00"

支持链式调用

moment().add(7, 'days').subtract(1, 'months').year(2009).hours(0).minutes(0).seconds(0);

详细请参看文档。

本地化

提供大量国际化文件,方便切换。例如设为简体中文:

>moment.locale('zh-cn');
"zh-cn"
>moment('2016-11-25 13:00:00').from(moment('2016-11-25 13:10:00'))
"10 分钟前"

使用本地化功能,需要加载对应的本地化脚本,例如简体中文的脚本是 {code}locale/zh-cn.js{/code}

参考

Moment.js 官方文档

稿源:风中飞舞 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合技术 » 使用Moment.js处理日期

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录