常用模块 - 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