今天项目中遇到一个需求,起始日期与结束日期相差不能超过31天,使用的组件是antd的DatePicker,看到禁用日期那里使用了moment的diff方法,别的资料有使用add或者abtract方法的,所以自己试了一下,做个记录。
moment 中文官网地址:http://momentjs.cn
moment 英文地址:https://momentjs.com
add
计算任意指定时间(当前或者给定的具体某一天)后的任意时间。
语法:
moment().add(Number, String);
moment().add(Duration); // Duration为持续时间,相当于add(Object)语法
moment().add(Object);
示例:
// 计算任意指定时间(当前或者给定的具体某一天)后的任意时间
const add1 = moment().add(20,'days').format('YYYY-MM-DD');
const add2 = moment(obj.endDate).add({days:7,months:1}).format('YYYY-MM-DD');
const duration = moment.duration({'days' : 5}); // 持续时间
const add3 = moment().add(duration).format('YYYY-MM-DD');
console.log('add1',add1) // 2023-11-08
console.log('add2',add2) // 2023-09-12
console.log('add3',add3) // 2023-10-24
如果觉得写days、years、hours等等这些字符串过于麻烦的话可以参考官网图片:
(表中右侧是左侧的简写)
使用案例:
moment().add(7, ‘days’) 等价于 moment().add(7, ‘d’);
subtract
计算任意指定时间(当前或者给定的具体某一天)前的任意时间。
语法:
moment().subtract(Number, String);
moment().subtract(Duration); // Duration为持续时间,相当于subtract(Object)语法
moment().subtract(Object);
示例:
// 与add方法正好相反,计算任意指定时间(当前或者给定的具体某一天)前的任意时间
const subtract = moment(obj.endDate).subtract(7,'d').format('YYYY-MM-DD');
const duration = moment.duration({'days' : 5});
const subtract2 = moment().subtract(duration).format('YYYY-MM-DD');
const subtract3 = moment(obj.endDate).subtract({days:7,months:1}).format('YYYY-MM-DD');
diff
计算两个时间的差值
语法:
moment(endTime).diff(moment(startTime), 'years')
moment(endTime).diff(moment(startTime), 'months')
moment(endTime).diff(moment(startTime), 'days')
moment(endTime).diff(moment(startTime),'minutes' )
moment(endTime).diff(moment(startTime), 'seconds')
注意:开始时间和结束时间的时间差,以“天”为单位时,endTime和startTime都是毫秒数
示例:
// 简单使用 计算相差的天数
const cul = moment('2023-10-10').diff(moment('2023-10-19'),'days');
console.log(cul); // 9
// 计算小时之间的差
const date1 = moment('08:30','hh:mm');
const date2 = moment('18:00','hh:mm');
const date3 = date2.diff(date1,'minute');//计算相差的分钟数
const h = Math.floor(date3/60);//相差的小时数
const mm=date3%60;//计算相差小时后余下的分钟数
// 在标准日期格式下可以不指定日期的格式 如:
const date1 = moment('2019-02-28 08:30:00');
const date2 = moment('2019-02-28 18:00:00');
const date3 = date2.diff(date1,'minute');//计算相差的分钟数
const h = Math.floor(date3/60);//相差的小时数
const mm = date3 % 60;//计算相差小时后余下的分钟数
补充知识
在我们的程序当中,
月份是从0开始,11结束,0月就代表我们实际中的1月;
一周是从周日开始的,所以没有星期七,所以周天返回的是0;
// 可以使用此代码进行验证
console.log('month',moment().month());
console.log('day',moment().add(x,'d').day()); // 传入任意x得到周天的日期即可