vue3封装日历组件关键计算函数

/*
     * 初始化日历信息
     1.获取当天日期,找到当前年份与月份
     2.按照当月信息找到当月第一天与最后一天
     3.获取第一天与最后一天分别是周几
     4.找到日历中要显示上个月最后几天与下个月开始几天
     5.找到日历中要显示的开始时间与结束时间
     */
const initDate = () => {
	calendarList.value = [];
	shiftInfo.value = [];
    // 获取当月的第一天
	let startTime = new Date(new Date(date.value).getFullYear(), new Date(date.value).getMonth(), 1);
    // 获取当月的最后一天
	let endTime = new Date(new Date(date.value).getFullYear(), new Date(date.value).getMonth() + 1, 0);
    // 计算当月第一天是一个星期中的第几天
	let startDays = startTime.getDay();
    // 计算当月最后一天是一个星期中还剩几天补满一个星期
	let endDays = 6 - endTime.getDay();
    // 当月第一天减去开始差的天数
	let momentStart: any = moment(startTime).subtract(startDays, "days");
    // 当月最后一天加上结束差的天数
	let momentEnd: any = moment(endTime).add(endDays, "days");
    // 获取momentStart对应的date对象
	calendarStartTime.value = momentStart._d;
    // 获取momentEnd对应的date对象
	calendarEndTime.value = momentEnd._d;
    // 两个日期之间的范围值
	let duration: any = moment.duration(moment(calendarEndTime.value).diff(moment(calendarStartTime.value)));
	// 当月日历范围内总天数
	let dayLength = duration._milliseconds / 1000 / 60 / 60 / 24 + 1;
	let currentDay = calendarStartTime.value.getTime();
	let year = new Date().getFullYear();
	let month = new Date().getMonth();
	let day = new Date().getDate();
	for (let index = 0; index < dayLength; index++) {
		let obj: any = {};
		obj.disabled = false;
		obj.day = currentDay;
		obj.isCurrentDay = currentDay === new Date(year, month, day).getTime();
		obj.isCurrentMonth = new Date(currentDay).getMonth() === new Date(date.value).getMonth();
		obj.shiftList = [];
		calendarList.value.push(obj);
		let momentCurrent: any = moment(currentDay).add(1, "days");
		currentDay = momentCurrent._d.getTime();
	}
	shiftInfo.value = calendarList.value;
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值