/**
* 获取当天零点零时零分零秒的日期对象
*
* @return {Date}
*/
const getToDayStart = () => {
const date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date;
};
/**
* 获取当天最后一秒的日期对象
*
* @return {Date}
*/
const getToDayEnd = () => {
const date = new Date();
date.setHours(23);
date.setMinutes(59);
date.setSeconds(59);
date.setMilliseconds(999);
return date;
};
/**
* 判断一个日期是否为闰年
*
* @param {Date} date
* @return {Boolean}
*/
const isLeapYear = (date) => {
const year = date.getFullYear();
return year % 4 === 0;
};
/**
* 获取本周的一天
*
* @param {Number} day 0 ~ 6 代表 周日到周六
* @param {Date?} date 计算的日期对象, 默认为当天
* @return {Date}
*/
const getDayInThisWeek = (day, date) => {
if (typeof day !== 'number') throw new Error('参数只支持 number 类型');
if (day < 0 || day > 6) throw new Error('参数只支持 0 ~ 6 的数字');
if (typeof day !== 'number') throw new Error('参数只支持 number 类型');
date = date || getToDayStart();
const currentWeek = date.getDay();
const currentDay = date.getDate();
date.setDate(currentDay + (day - currentWeek));
return date;
};
/**
* 获取当月的天数
*
* @param {Date?} date 计算的日期对象, 默认为当天
* @return {Number}
*/
const getMonthDayCount = (date) => {
date = date || getToDayStart();
const mouth = date.getMonth() + 1;
if (mouth === 2) return isLeapYear(date) ? 29 : 28;
if ([4, 6, 9, 11].includes(mouth)) return 30;
return 31;
};
/**
* 获取当月最后一天的日期对象
*
* @param {Date?} _date 计算的日期对象, 默认为当天
* @return {Date}
*/
const getLastDayInThisMount = (_date) => {
const date = new Date(_date || getToDayStart());
date.setDate(getMonthDayCount(date));
return date;
};
/**
* 获取日期在当月的第几周
*
* @param {Date?} _date 计算日期, 默认为今天
* @return {Number}
*/
const getWhichWeekInThisMount = (_date) => {
const date = new Date(_date || new Date());
const firstDate = new Date(date);
firstDate.setDate(1);
return Math.ceil((date.getDate() - firstDate.getDate() + firstDate.getDay()) / 7);
};
/**
* 获取当月周数(包括不完整周)
*
* @param {Date?} _date 计算日期, 默认当前日期
* @return {Number}
*/
const getThisMountWeekCount = (_date) => {
const date = new Date(_date || new Date());
const firstDate = new Date(date);
firstDate.setDate(1);
const lastDate = getLastDayInThisMount(_date);
return (lastDate.getDate() - firstDate.getDate() + 1 + firstDate.getDay() + (6 - lastDate.getDay())) / 7;
};
Date 的工具函数
最新推荐文章于 2025-04-11 19:11:11 发布