javascript - 只想比较 TIME 值 MomentJS

标签 javascript momentjs

在浏览了其他一些 MomentJS 问题和答案后,我仍然对如何使用 moment 来简单地比较两个不同时间感到困惑。

我不需要(想要)考虑日期/日期。

我的用例是这样的: 我正在从配置文件中读取时间表(开始/结束时间)。这是使用 Node.js 完成的

Starttime = 6:30 PM
Endtime = 3:30 AM

var currentTime= moment();    // e.g. 11:00 pm
var starttime = moment('06:30 pm', "HH:mm a");
var endtime = moment('03:30 am', "HH:mm a");

amIBetween = currtime.isBetween(starttime , endtime);
console.log(amIBetween);   //  returns false

从技术上讲,我的场景跨越了两天,我明白为什么它是错误的。

我需要(期望)时刻返回 TRUE - 即当前时间在开始时间和结束时间之间并且落在该范围内。

我是否需要检查上午 12 点之后的时间,然后添加一天以使检查生效? 完成此任务的任何其他建议。我查看了具有“包含”功能的时刻范围,但也有类似的问题。

我很难相信它是如此复杂,但也许确实如此:\

--

这里进一步澄清了跨天出现的问题,即使试图更明确:

var currentTime= moment('11:00p', "HH:mm a");
var startTime = moment('06:00p', "HH:mm a");
var endTime = moment('03:30a', "HH:mm a");

currentTime.toString(); //"Fri Oct 28 2016 23:00:00 GMT-0400"
startTime.toString();   // "Fri Oct 28 2016 18:00:00 GMT-0400"
endTime.toString();    // "Fri Oct 28 2016 03:30:00 GMT-0400"

currentTime.isBetween(startTime, endTime);  // false
currentTime.isAfter(endTime) && currentTime.isBefore(startTime); //false
currentTime.isAfter(startTime) && currentTime.isBefore(endTime); //false

似乎很明显它们是错误的,因为日期/日期是按时刻考虑的。这就是我想要解决的问题。

以下内容可行:

endTime.add(1, "days");
currentTime.isBetween(startTime, endTime);  // TRUE

但这意味着,我需要检查 START TIME 是否在上午 12 点之前,以及 ENDTIME 是否在 12 点之后,然后在 ENDTIME 基础上添加 1 天。拼凑?

最佳答案

经过我自己的测试并查看其他人的建议后,仍然发现忽略日期/日期并尝试跨越几天是一个问题。我想出了这个,现在正在我的应用程序中运行。

isTimeBetween = function(aStartTime, anEndTime, aCurrTime)
{
    // you may pass in aCurrTime or use the *actual* current time
    var currentTime = !aCurrTime ? moment() : moment(aCurrTime, "HH:mm a");
    var startTime = moment(aStartTime, "HH:mm a");
    var endTime = moment(anEndTime, "HH:mm a");

    if (startTime.hour() >=12 && endTime.hour() <=12 )
    {
        endTime.add(1, "days");       // handle spanning days
    }

    var isBetween = currentTime.isBetween(startTime, endTime);

    /***  testing   
    startTimeString = startTime.toString();
    endTimeString = endTime.toString();
    currentTimeString = currentTime.toString();

    console.log(startTimeString);
    console.log(endTimeString);
    console.log(currentTimeString);
    console.log('\nis '+ currentTimeString  + ' between ' + 
              startTimeString + ' and ' + endTimeString + ' : ' 
              + isBetween);
    ****/
    return isBetween;
    }

isTimeBetween("06:30pm", "03:30am", "11:00pm");     //true      !! this is main use case
isTimeBetween("06:30pm", "10:30pm", "11:00pm");     //false
isTimeBetween("04:00am", "06:00am");                //true (e.g. current time is 5am

关于javascript - 只想比较 TIME 值 MomentJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311964/

相关文章:

javascript - 有没有办法简化 Canvas 代码

Javascript 到图像回退

javascript - 获取今天、昨天和明天的日期并在这些日期之间切换

javascript - "getDate().toJSON()"失去一天

javascript - 使用 ES6 的 AngularJs Controller 中的服务调用

javascript - 如何计算网格中随机数的平均值?

javascript - 在没有 UIWebView 的情况下从 Xcode 执行 JS 文件

reactjs - 使用 moment 将日期设置为一个月而不是当前日期

javascript - 如何使用 moment.js 格式化 SQL Server 时间数据类型

javascript - 如何将 "1h30m"样式持续时间解析为 Moment.js 持续时间