Moment.js 常用操作

获取本周第一天

moment().startOf('week')

获取本周周一

moment().startOf('isoWeek')

获取当前月第一天

moment().startOf('month')

获取当前月最后一天

moment().endOf('month')

获取本周最后一天(周六)

moment().endOf('week')

获取本周周日

moment().endOf('isoWeek')

获取当月第一天是星期几

// 用于设置星期几,其中星期日为 0、星期六为 6
moment().startOf('month').day()

比较两个时间的大小

//第二个参数用于确定精度,且不仅仅是要检查的单个值,因此使用 day 将会检查年份、月份、日期。
moment('2010-10-31').isBefore('2010-12-31', 'day'); // true
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

今天

onst startTime = moment(moment().startOf('day').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().valueOf()).format('YYYY/MM/DD HH:mm:ss');

昨天

const startTime = moment(moment().add(-1, 'days').startOf('day').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().add(-1, 'days').endOf('day').valueOf()).format('YYYY/MM/DD HH:mm:ss');

本周

const startTime = moment(moment().week(moment().week()).startOf('week').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().week(moment().week()).endOf('week').valueOf()).format('YYYY/MM/DD HH:mm:ss');

上周

const startTime = moment(moment().week(moment().week() - 1).startOf('week').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().week(moment().week() - 1).endOf('week').valueOf()).format('YYYY/MM/DD HH:mm:ss');

本月

const startTime = moment(moment().month(moment().month()).startOf('month').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().month(moment().month()).endOf('month').valueOf()).format('YYYY/MM/DD HH:mm:ss');

上月

const startTime = moment(moment().month(moment().month() - 1).startOf('month').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().month(moment().month() - 1).endOf('month').valueOf()).format('YYYY/MM/DD HH:mm:ss');

本季度

const startTime = moment(moment().quarter(moment().quarter()).startOf('quarter').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().quarter(moment().quarter()).endOf('quarter').valueOf()).format('YYYY/MM/DD HH:mm:ss');

上季度

const startTime = moment(moment().quarter(moment().quarter() - 1).startOf('quarter').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().quarter(moment().quarter() - 1).endOf('quarter').valueOf()).format('YYYY/MM/DD HH:mm:ss');

本年

const startTime = moment(moment().year(moment().year()).startOf('year').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().year(moment().year()).endOf('year').valueOf()).format('YYYY/MM/DD HH:mm:ss');

上年

const startTime = moment(moment().year(moment().year() - 1).startOf('year').valueOf()).format('YYYY/MM/DD HH:mm:ss');

const endTime = moment(moment().year(moment().year() - 1).endOf('year').valueOf()).format('YYYY/MM/DD HH:mm:ss');

某一时间所在的周一和周日

计算指定日期是这周第几天

moment(filtrateForm.date, 'YYYY-MM-DD').format('E')

周一日期

moment(filtrateForm.date).subtract(weekOfday - 1, 'days').format('YYYY-MM-DD');

周日日期

moment(filtrateForm.date).add(7 - weekOfday, 'days').format('YYYY-MM-DD');

计算两个日期间隔多少天

moment('2023-05-31').diff(moment('2023-09-01'), 'days');

获取昨天的日期

moment( moment().add(-1, 'days').startOf('day').valueOf(), ).format('YYYY-MM-DD 23:59:59');

去年当天日期减一天

 moment().subtract(1, 'year').subtract(1, 'days').format('YYYY-MM-DD 00:00:00');

只能选择当天(不包含)之前并且区间最多一年之内的日期(配合antd RangePicker组件使用 )

const disabledDate = current => {
	if (!dates || dates.length === 0) {
		// 如果未选择日期 择禁止选择当天及当天之后的日期
		return current > moment().subtract(1, 'day');
	}
	// 设置只能选择一年之内的日期
	const tooLate = dates[0] && current.diff(dates[0], 'days') > 365;
	const tooEarly = dates[1] && dates[1].diff(current, 'days') > 365;
	return tooEarly || tooLate;
};

// antd RangePicker 组件
<RangePicker
    disabledDate={disabledDate}
    onCalendarChange={val => setDates(val)}
    placeholder={['开始日期', '结束日期']}
/>

当前日期加一天

moment().add(1, 'days');

当前日期减一天

moment().subtract(1, 'days');

使用moment.js遇到坑

原博: https://www.jianshu.com/p/49952d0e7897
使用add()或subtract()加减日期的时候会改变自身的值,需要复制过后才行。
方法1.使用moment()函数再包装一次对象
将代码const end = start.add(1, 'day')改成const end = moment(start).add(1, 'day')
方法2.使用clone()方法复制一个对象
将代码const end = start.add(1, 'day')改成const end = start.clone().add(1, 'day')