js解决关于时间相关的问题
在日常工作中总会遇上一些时间处理的问题,就比如:请假时,要求补办请假条的时间最晚不得晚于下周一
一般遇上这样的问题,首先就是判断时间的格式问题,如果是字符串时间就需要将这个字符串时间转成时间格式
字符串格式转成时间格式
function parseDate(dateStr) {
const parts = dateStr.split('-');
return new Date(parts[0], parts[1] - 1, parts[2]); //注意月份是从0开始的,所以需要减一
}
parseDate("2023-02-03")
parseDate是自定义的时间转换格式,转的是yyyy-mm-dd的格式
根据请假时间获取请假时间的下周一
function getNextMonday(date) {
let day = date.getDay();
console.log("进入下周一辅助函数----》", day);
let diff = (day === 0) ? 1 : (day === 1) ? 8 - 1 : (8 - day);
date.setDate(date.getDate() + diff);
console.log(date, "返回值");
return date;
}
getNextMonday方法传的参数是请假时间,这样返回的date就是请假时间的下周一时间
判断获取的下周一时间和补办请假条的时间是否符合规定了
function isNextMonday(sqsj, qcsj) { //传的是申请时间和请假时间
// 解析字符串为Date对象
const startDate = parseDate(qcsj);
const applyDate = parseDate(sqsj);
// 获取请假时间所在周的下一个周一
const nextMonday = getNextMonday(new Date(startDate));
console.log("请假时间: " + startDate);
console.log("申请时间: " + applyDate);
console.log("下周一: " + nextMonday);
// 比较申请时间是否在请假时间的下一个周一之前(包括下周一)
if (applyDate >= startDate && applyDate <= nextMonday) {
console.log("申请时间在启程时间到下周一之间(包括下周一)");
return true;
}else if(applyDate<startDate && startDate<=nextMonday){
console.log("启程时间大于申请时间,且启程时间在下周一之前(包括下周一)");
return true;
}
else {
console.log("申请时间不在启程时间到下周一之间");
return false;
}
}
**ps:**注意,请假条不仅可以在请假时间之后补办,也可以在请假时间之前提前申请,所以需要判断申请时间是在请假时间之前还是在请假时间之后
以上就是解决这个问题的三个步骤,如果你有更好的想法,欢迎在评论区交流沟通呀~