moment.js 是一个 JavaScript 日期处理类库,用于解析、检验、操作、以及显示日期。因为项目中经常用到,在此记录一下比较常用的方法。如果想学习更详细的使用方法,可以访问 Moment.js官网 或者查看 Moment.js中文网。以下用到的例子均是没有设置 moment.locale() 语言环境情况下的测试结果。
1.日期格式化
//moment().format(String)
moment().format(); //moment 2020-03-23T18:20:11+08:00
//年份
moment().format('YYYY'); //2020
//季度
moment().format('Q'); //1
//月份
moment().format('MMMM'); //March
//月份的日期
moment().format('DD'); //24
//年份的日期
moment().format('DDD'); //84
//星期几
moment().format('dddd'); //Monday
//更具体的格式
moment().format('YYYY-MM-DD HH:mm:ss'); //2020-03-23 18:10:54
moment().format('YYYY[测]MM[试]DD HH[时]mm[间]ss'); //2020测03试23 18时25间42
moment().format('YYYY [test] YYYY'); //2020 test 2020
moment().format('YYYY [test] MM'); //2020 test 03
moment().format('YYYY [test] DD'); //2020 test 23
2.时间戳字符串相互转换
moment(1259186487000).format('YYYY-MM-DD HH:mm:ss'); //2009-11-26 06:01:27
moment('2009-11-26 06:01:27').valueOf(); //1259186487000
+moment('2009-11-26 06:01:27'); //1259186487000
3.相对时间
moment('20091126', 'YYYYMMDD').fromNow(); //10 years ago
moment('20091126', 'YYYYMMDD').fromNow(true); //10 years
moment([2009, 11, 26]).fromNow(); //10 years ago
moment().startOf('day').fromNow(); //15 hours ago
moment().endOf('hour').fromNow(); //in 24 minutes
4.时间查询
//查询当前年份是否为闰年
moment([2009]).isLeapYear(); //false
//检查一个时间是否在另一个时间之前(精确到秒比较)
moment('2009-11-26 06:01:27').isBefore('2009-11-26 06:01:28'); //true
//检查一个时间是否在另一个时间之前(精确到年比较)
moment('2009-11-26 06:01:27').isBefore('2009-11-26 06:01:28', 'year'); //false
//检查一个时间是否在另一个时间之后
moment('2009-11-26').isAfter('2020-11-26', 'year'); //false
//检查一个时间是否在其他两个时间之间
moment('2016-11-26').isBetween('2009-11-26', '2020-11-26'); //true
//获取当月的天数
moment('2009-11', 'YYYY-MM').daysInMonth(); //30
//获取当前 moment 年份的周数
moment().weeksInYear(); //52
4.时间计算
//时间增加
moment().add(4, 'years').format('YYYY-MM-DD'); //2024-03-24
moment().add(4, 'months').format('YYYY-MM-DD'); //2020-07-24
moment().add(4, 'days').format('YYYY-MM-DD'); //2020-03-28
moment([2016]).add(4, 'years').format('YYYY'); //2020
//时间减少
moment().subtract(10, 'years').format('YYYY'); //2010
//设置为时间单位的开头对时间进行更改
moment().startOf('hour').format('YYYY-MM-DD HH:mm:ss'); //2020-03-24 15:00:00
//设置为时间单位的末尾对时间进行更改
moment().endOf('hour').format('YYYY-MM-DD HH:mm:ss'); //2020-03-24 15:59:59
5.时长创建
//要创建时长,调用 moment.duration(),默认以毫秒为单位。
//创建时长1500毫秒
moment.duration(1500);
//获取时长的毫秒数(返回 0 至 999 之间的数字)
moment.duration(1500).milliseconds(); //500
//获取时长的秒数(返回 0 至 59 之间的数字)
moment.duration(1500).seconds(); //1
//获取时长的长度(以秒为单位)
moment.duration(1500).asSeconds(); //1.5
//以秒为单位创建时长
moment.duration(2, 'seconds');
//以年为单位创建时长
moment.duration(2, 'years');
6.日历时间显示
//moment().calendar(referenceTime, formats);
//moment#calendar 会根据日期与 referenceTime 的日期(默认为今天)的接近程度,使用不同的字符串格式化日期
moment().calendar(); //Today at 3:35 PM
moment().calendar(null, {
sameDay: '[今天]',
nextDay: '[明天]',
nextWeek: 'dddd',
lastDay: '[昨天]',
lastWeek: '[上个] dddd',
sameElse: 'DD/MM/YYYY'
}); //今天
moment().calendar('2020-03-25', {
sameDay: '[今天]',
nextDay: '[明天]',
nextWeek: 'dddd',
lastDay: '[昨天]',
lastWeek: '[上个] dddd',
sameElse: 'DD/MM/YYYY'
}); //昨天
moment().calendar(null, {
sameDay: function (now) {
if (this.isBefore(now)) {
return '[今天将会发生]';
} else {
return '[今天已发生]';
}
/* ... */
}
}); //今天已发生