常用模块 - moment ¶
作者:KK
发表日期:2020.06.01
这是近几年流行起来的一个很好用的时间处理模块,官方文档 http://momentjs.cn/docs/,有时候在里面找你需要的方法还是不太容易的,这里发一些我用过方法,看看有没有你需要的,我想我的使用都覆盖大多数场景了。
首先来个基本示例 ¶
//打印当前时间
moment().format('YYYY-MM-DD HH:mm:ss'); // 2020-06-01 22:28:51
moment().format(); // 2020-01-07T18:11:12Z 不传参数就默认输出 UTC 标准格式
//指定一个时间构造 moment 对象后,输出其它格式的时间
moment('2020-01-07 23:11:12').format('YYYYMMDD_HHmmss'); // 20200107_231112
//指定一个时间格式进行初始化
var 别人传给你的时间= '2020_01_03 173344';
moment(别人传给你的时间, 'YYYY_MM_DD HHmmss').format('YYYY-MM-DD HH:mm:ss'); // 2020-01-03 17:33:44 就是通过第2个参数来说明第一个参数的每一位数字代表什么意思
其它我会用到的 ¶
计算N久前的时间 ¶
// 1天之前
moment('2020-01-07 23:11:12').subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'); // 2020-01-06 23:11:12
// 3小时之前
moment('2020-01-07 23:11:12').subtract(3, 'hour').format('YYYY-MM-DD HH:mm:ss'); // 2020-01-07 20:11:12
// 一减再减
var moment2 = moment('2020-01-07 23:11:12');
var moment3 = moment2.subtract(3, 'minute');
moment3.subtract(31, 'second').format('YYYY-MM-DD HH:mm:ss'); // 2020-01-07 23:07:41
计算N久后的时间 ¶
// 1天之后
moment('2020-01-07 23:11:12').add(1, 'day').format('YYYY-MM-DD HH:mm:ss'); // 2020-01-08 23:11:12
// 3小时之后
moment('2020-01-07 23:11:12').add(3, 'hour').format('YYYY-MM-DD HH:mm:ss'); // 2020-01-08 02:11:12
时间偏移量 ¶
//获取时间偏移量
moment().utcOffset(); //在中国,这是 480,表示时区偏移了 480 分钟,官方文档表示可能会是负数,我没研究负数的情况
//设置时区 再计算
moment().utcOffset(7).format('YYYY-MM-DD HH:mm:ss'); //偏移 7小时,大致上是韩国和日本的时间
moment().utcOffset(420).format('YYYY-MM-DD HH:mm:ss'); //小于 -16 或大于 16 就会算作分钟,偏移 420分钟 ,那也是偏移 7小时,大致上是韩国和日本的时间
与 Date对象 互转 ¶
// date 转 moment
var date = new Date(2020, 4, 13, 14); // 这里的 4 是 5月 哦
moment(date).format('YYYY-MM-DD HH:mm:ss'); // 2020-05-13 14:00:00
// moment 转 date
var date = moment('2020-01-07 23:11:12').add(3, 'hour').toDate(); // 2020-1-8 2:11:12 AM
两个时间计算和比较 ¶
var moment1 = moment('2020-03-14 22:11:14');
var moment2 = moment('2020-07-14 22:11:14');
var diffMicroSeconds = moment2 - moment1; //算出相差的毫秒数
console.log(
diffMicroSeconds,
moment2 < moment1 // false 可以直接大小比较
moment2 != moment1 // 是否相等都可以
);
与 unix时间戳 互相转换 ¶
moment('2020-07-14 22:11:14').unix(); // 1594735874
moment(1594735874 * 1000).format('YYYY-MM-DD HH:mm:ss'); // 2020-07-14 22:11:14 构造参数为 毫秒级的unix时间戳
某周期的 第一天 和 最后一天 ¶
//当月的 起始时间
moment('2020-06-22 22:11:14').startOf('month').format('YYYY-MM-DD HH:mm:ss'); // 2020-06-01 00:00:00
//当月的 结束时间
moment('2020-06-22 22:11:14').endOf('month').format('YYYY-MM-DD HH:mm:ss'); // 2020-06-30 23:59:59
//当周的 开始时间
moment('2020-06-22 22:11:14').startOf('week').format('YYYY-MM-DD HH:mm:ss'); // 2020-06-21 00:00:00
//当周的 结束时间
moment('2020-06-22 22:11:14').endOf('week').format('YYYY-MM-DD HH:mm:ss'); // 2020-06-27 23:59:59
//当天的 开始时间
moment('2020-06-22 22:11:14').startOf('day').format('YYYY-MM-DD HH:mm:ss'); // 2020-06-22 00:00:00
//当天的 结束时间
moment('2020-06-22 22:11:14').endOf('day').format('YYYY-MM-DD HH:mm:ss'); // 2020-06-22 23:59:59
当年的第几天 ¶
moment('2020-06-22 22:11:14').dayOfYear(); // 174
几号 ¶
moment('2020-06-15 22:11:14').date(); // 15
几点钟 ¶
moment('2020-06-22 22:11:14').hour(); // 22
星期几 ¶
moment('2020-06-06 22:11:14').weekday(); // 6 = 星期六
第几季 ¶
moment('2020-06-06 22:11:14').quarter(); // 2 = 第2季,做季度数据统筹时用到
当共有多少周 ¶
moment('2020-06-06 22:11:14').weeksInYear(); // 52
时间是否有效 ¶
moment('2020-06-27 22:11:14').isValid(); // true
moment('0000-00-00 00:00:00').isValid(); // false