Node.JS 验证某个时间是否在某个时间段内(以小时为单位判断)

时间点的验证需要考虑跨天的情况:

下面分别列举2种情况,

情况1:验证凌晨3点,是否在22点~19点这个区间。

跨天的情况下,22点~19点的时间点,分别为:22,23,24,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19。

可以看到3点在22点~19点的区间。

 

情况 2:验证凌晨3点是否在22点~2点这个区间。

跨天的情况下,22点~2点的区间,分别为:22,23,24,1,2

可以看到3点不在22点~2点的区间。

 

基于上面的需求,实现代码如下:

/**
 * 获取当前时间戳(毫秒)
 */
function getNowMilliSecond(){
	return Math.floor(Date.now());
}

/**
 * 获取当前时间戳(秒)
 */
function getNowSceond(){
	return Math.floor(Date.now() / 1000);
}

/**
 * 根据时间戳获取年,月,日,时,分,秒
 * @param {*} nTimeStamps 
 */
function getTimeInfo(nTimeStamps) {
    //转毫秒
    var date = new Date(nTimeStamps * 1000);
    //返回数据
    var retData = {
        nYear: date.getFullYear(),
        nMonth: date.getMonth() + 1,
        nDay: date.getDate(),
        nHour: date.getHours(),
        nMinutes: date.getMinutes(),
        nSeconds: date.getSeconds()
    };
    return retData;
}

/**
 * 字符时间转时间戳
 */
function strTimeToTimeStamps(strtime) {
    //时间转换
    var date = new Date(strtime);
    //获取时间戳
    var timeStamps = Date.parse(date);
    return timeStamps;
}

/**
 * 时间戳转字符时间
 * @param {*} nTimeStamps 
 */
function timeStampsToStrTime(nTimeStamps) {
    //转毫秒
    var date = new Date(nTimeStamps);
    //时间字符串
    var timeString = date.getFullYear() + "-" +
        (date.getMonth() + 1) + "-" +
        date.getDate() + " " +
        date.getHours() + ":" +
        date.getMinutes() + ":" +
        date.getSeconds() + ":" +
        date.getMilliseconds();
    return timeString;
}

/**
 * 验证时间是否在指定时间段内
 * @param {*} beginHour 
 * @param {*} endHour 
 * @param {*} targetHour 
 */
function isTargetHourArea(beginHour, endHour, targetHour) {
    //是否设置时间
    var bSetHourDay = false;
    if (endHour < beginHour) {
        bSetHourDay = true;
    }

    //起始小时字符
    var beginHour_String = "";
    //结束小时字符
    var endHour_String = "";
    //目标时间段字符
    var targetHour_String = "";
    //目标时间段时间戳
    var targetHourStamps = 0;
    //当前时间戳
    var nCurTimeStamps = getNowSceond();
    //获取时间信息
    var timeInfo = getTimeInfo(nCurTimeStamps);
    //设置目标时间段字符
    targetHour_String = timeInfo.nYear + "-" + timeInfo.nMonth + "-" + timeInfo.nDay + " " + targetHour + ":00:00:00";
    //目标时间段时间戳
    targetHourStamps= strTimeToTimeStamps(targetHour_String);
    //设置时间判断
    if (bSetHourDay) {
        //当前小时大于起始时间
        if (targetHour >= beginHour) {
            //结束时间-天=加1
            var dayTimeStamps = nCurTimeStamps + (24 * 60 * 60);
            //时间信息
            var timeInfoTemp = getTimeInfo(dayTimeStamps);
            //起始时间字符串
            beginHour_String = timeInfo.nYear + "-" + timeInfo.nMonth + "-" + timeInfo.nDay + " " + beginHour + ":00:00:00";
            //结束时间字符串
            endHour_String = timeInfoTemp.nYear + "-" + timeInfoTemp.nMonth + "-" + timeInfoTemp.nDay + " " + endHour + ":00:00:00";
        }
        //当前小时小于起始时间
        else if (targetHour < beginHour) {
            //起始时间-天-减1
            var dayTimeStamps = nCurTimeStamps - (24 * 60 * 60);
            //时间信息
            var timeInfoTemp = getTimeInfo(dayTimeStamps);
            //起始时间字符串
            beginHour_String = timeInfoTemp.nYear + "-" + timeInfoTemp.nMonth + "-" + timeInfoTemp.nDay + " " + beginHour + ":00:00:00";
            //结束时间字符串
            endHour_String = timeInfo.nYear + "-" + timeInfo.nMonth + "-" + timeInfo.nDay + " " + endHour + ":00:00:00";
        }
    }
    else {
        //起始时间字符串
        beginHour_String = timeInfo.nYear + "-" + timeInfo.nMonth + "-" + timeInfo.nDay + " " + beginHour + ":00:00:00";
        //结束时间字符串
        endHour_String = timeInfo.nYear + "-" + timeInfo.nMonth + "-" + timeInfo.nDay + " " + endHour + ":00:00:00";
    }

    //起始时间戳
    var beginHourStamps = strTimeToTimeStamps(beginHour_String);
    //结束时间戳
    var endHourStamps = strTimeToTimeStamps(endHour_String);

    //返回信息
    var retInfo = {};
    //code
    retInfo.code = 0;
    //起始时间戳
    retInfo.beginHourStamps = beginHourStamps;
    //起始时间戳字符串
    retInfo.strBeginHourStamps = timeStampsToStrTime(beginHourStamps);
    //结束时间戳
    retInfo.endHourStamps = endHourStamps;
    //结束时间字符串
    retInfo.strEndHourStamps = timeStampsToStrTime(endHourStamps);
    //目标时间戳
    retInfo.targetHourStamps = targetHourStamps;
    //目标时间字符串
    retInfo.strTargetHourStamps = timeStampsToStrTime(targetHourStamps);
    //区间验证
    if(retInfo.targetHourStamps >= retInfo.beginHourStamps && retInfo.targetHourStamps < retInfo.endHourStamps){
        retInfo.code = 1;
    }
    //返回数据
    return retInfo;
}


//起始时间
var beginHour = 22;
//结束时间
var endHour = 19;
//指定时间
var targetHour = 3;
//小时时间信息
var hourStampsInfo = isTargetHourArea(beginHour, endHour, targetHour);
//验证成功
if(hourStampsInfo.code == 1){   //条件成立
    console.log("目标时间:%d 在%d-%d区间内!",targetHour,beginHour,endHour);
}
else{
    console.log("目标时间:%d 不在%d-%d区间内!",targetHour,beginHour,endHour);
}
//输出日志
console.log("起始时间信息 beginHour=%d stamps=%d strHour=%s",       //输出:起始时间信息 beginHour=22 stamps=1608040800000 strHour=2020-12-15 22:0:0:0
            beginHour, 
            hourStampsInfo.beginHourStamps, 
            hourStampsInfo.strBeginHourStamps);
console.log("结束时间信息 endHour=%d stamps=%d strHour=%s",         //输出:结束时间信息 endHour=19 stamps=1608116400000 strHour=2020-12-16 19:0:0:0
            endHour, 
            hourStampsInfo.endHourStamps,                         
            hourStampsInfo.strEndHourStamps);
console.log("目标时间信息 targetHour=%d stamps=%d strHour=%s",      //输出:目标时间信息 targetHour=3 stamps=1608058800000 strHour=2020-12-16 3:0:0:0
            targetHour, 
            hourStampsInfo.targetHourStamps, 
            hourStampsInfo.strTargetHourStamps);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值