js 计算当前时间和和一段时候后的工作日天数,排除周末和法定假日
程序员文章站
2022-05-20 09:38:30
...
例:计算当前时间 过5个(设为N个工作日)工作日后的的日期。
思路:
获取当前系统时间 +n(n个工作日后) + 之间的周末和法定假日天数
因为法定假日是不变的 ,所以 首先我们将法定假日设定为一个数组
//节假日数组
var Holiday = ["2018/1/1","2018/1/15","2018/2/19","2018/5/28","2018/7/4","2018/9/3","2018/10/8","2018/11/12","2018/11/22","2018/12/25"];
/**
* 使用循环的方式判断一个元素是否存在于一个数组中
* @param {Object} arr 数组
* @param {Object} value 元素值
*/
function isInArray(arr,value){
for(var i = 0; i < arr.length; i++){
if(value === arr[i]){
return true;
}
}
return false;
}
然后获取当前的系统时间
//格式化当前的系统时间 格式为(yyyy-MM-dd)
function times(){
var date = new Date();
var nowMonth = date.getMonth() + 1;
var hours = date.getHours();
if(hours >= 15){
var strDate = date.getDate();
}else{
var strDate = date.getDate()-1;
}
// 获取当前是几号
//var strDate = date.getDate();
// 添加分隔符“-”
var seperator = "-";
// 对月份进行处理,1-9月在前面添加一个“0”
if (nowMonth >= 1 && nowMonth <= 9) {
nowMonth = "0" + nowMonth;
}
// 对月份进行处理,1-9号在前面添加一个“0”
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
// 最后拼接字符串,得到一个格式为(yyyy-MM-dd)的日期
var nowDate = date.getFullYear() + seperator + nowMonth + seperator + strDate;
return nowDate;
}
这里是计算节假日的函数
/**
* 计算当期时间 经过一段工作日后的日期
* @param {date} startDate 当前时间
* @param {string} limitDay 工作日
*/
function getWorkDate(startDate,limitDay){
var time = Date.parse(startDate);
var startTime = new Date(Date.parse(startDate));
var startTime = startTime.getTime();
var T = 24*60*60*1000;
var endTime = startTime+(limitDay*T);
if(limitDay>0){
var holidays = 0;
for(var i=startTime+T;i<=endTime;i+=T){
var date = new Date(i);
//此处为节假日逻辑
if(date.getDay()==0 || date.getDay()==6){
holidays++;
}
//判断日期是否在节假日数组中
if(isInArray(Holiday,date.toLocaleDateString()) == true){
holidays++;
}
}
return getWorkDate(new Date(endTime),holidays);
}else{
return startDate.toLocaleDateString();
}
}
实例化
//获取当前系统时间
var current_time = times();
//计算当前时候 三个工作日后的日期 格式为(YYYY-MM-dd)
var min_days = getWorkDate(current_time,"3");
上一篇: 617. 合并二叉树
下一篇: [leetcode]617. 合并二叉树