只想比较时间值MomentJS

Only want to compare TIME values MomentJS(只想比较时间值MomentJS)
本文介绍了只想比较时间值MomentJS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看完其他一些MomentJS问答后,我仍然不明白如何使用Moment简单地比较两个不同的时间

我不需要考虑日期/日期。

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

完成的

开始时间=下午6:30
结束时间=凌晨3:30

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

从技术上讲,我的方案跨越两天,我理解为什么它是错误的。

我需要(期望)Moment返回TRUE-即currtime介于开始时间和结束时间之间,并且落在该范围内。

我是否需要在凌晨12点之后检查一段时间,然后添加一天以使检查生效? 实现这一目标的任何其他建议。我看了一下Moment-Range,它有"包含"功能,但也有类似的问题。

我很难相信它就是这么复杂,但也许是这样的:

--

这里进一步澄清的是,即使在尝试更明确的情况下,跨天数也会出现问题:

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

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

以下内容将起作用:

endTime.add(1, "days");
currentTime.isBetween(startTime, endTime);  // TRUE
但是,这意味着我需要检查开始时间是否在12am之前&;&;结束时间在12am之后,然后将结束时间增加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('
is '+ 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

这篇关于只想比较时间值MomentJS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)