2016-11-10 78 views
1

我目前可以成功,只要其然而在同一天之内,如果时间跨越2天跨越失败检查。检查,如果当前时间(UTC)落在范围

我需要使它在多天内也能正常工作。

任何想法?

** 更新 **

此将是不断变化的,所以我不希望设置这样的固定日期的使用环境。

这是我的时刻:

var startTime, 
 
    endTime, 
 
    currentTime = moment.utc(), 
 
    result, 
 
    time, 
 
    str = ''; 
 

 
function test() { 
 

 
    str += 'Current UTC Time <br>'; 
 
    str += currentTime.format() + '<br>'; 
 
    str += '------------------------------ <br>'; 
 

 
    startTime = moment.utc('01:00', 'HH:mm'); 
 
    endTime = moment.utc('10:00', 'HH:mm'); 
 

 
    result = currentTime.isBetween(startTime, endTime); 
 
    str += 'Test one: ' + result + '<br>'; 
 
    str += 'start 01:00 - end 10:00 <br>'; 
 
    str += 'result is True which is correct <br>'; 
 
    str += '------------------------------ <br>'; 
 

 
    startTime = moment.utc('23:00', 'HH:mm'); 
 
    endTime = moment.utc('07:00', 'HH:mm'); 
 

 
    result = currentTime.isBetween(startTime, endTime); 
 
    str += 'Test two: ' + result + '<br>'; 
 
    str += 'start 23:00 - end 07:00 <br>'; 
 
    str += 'This spans across two days and the result is false which is incorrect <br>'; 
 

 
    $('div').html(str); 
 

 
} 
 

 
test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> 
 

 
<div> 
 
</div>

+0

这是一个日期范围内没有时间 – edward

+0

你的开始和结束时间需要包含日期和时间isBetween正常工作。 – skav

+0

真棒,任何想法如何整合? – edward

回答

1

如果你正在寻找期间,可以是在几个天startTime = moment.utc('23:00', 'HH:mm');不包含足够的信息用于此目的。有什么都没有说是否23:00今晚,昨天等

而且,你的第一个测试通过仅假设'01:00' 凌晨1点凌晨1点今天,而不是指昨天。如果昨天凌晨1点,当前时间是0点15分,那么它会报告错误,当它应该是真实的。

如果实施规则来确定的时间是今天或其他一些天,那么你可以执行以下操作,使您的比较工作:

var startPreviousDay = true; 
    var endNextDay = true; 

    startTime = moment.utc('23:00', 'HH:mm'); 
    if (startPreviousDay) startTime = startTime.subtract(1, 'day'); 

    endTime = moment.utc('07:00', 'HH:mm'); 
    if (endNextDay) endTime = endTime.add(1, 'day'); 

规则是什么设置这些完全取决于什么您有关于用户意图的信息。

var startTime, 
 
    endTime, 
 
    currentTime = moment.utc(), 
 
    result, 
 
    time, 
 
    str = ''; 
 

 
function test() { 
 

 
    str += 'Current UTC Time <br>'; 
 
    str += currentTime.format() + '<br>'; 
 
    str += '------------------------------ <br>'; 
 

 
    startTime = moment.utc('01:00', 'HH:mm'); 
 
    endTime = moment.utc('10:00', 'HH:mm'); 
 

 
    result = currentTime.isBetween(startTime, endTime); 
 
    str += 'Test one: ' + result + '<br>'; 
 
    str += 'start 01:00 - end 10:00 <br>'; 
 
    str += 'result is True which is correct <br>'; 
 
    str += '------------------------------ <br>'; 
 

 
    var startPreviousDay = true; 
 
    var endNextDay = true; 
 
    
 
    startTime = moment.utc('23:00', 'HH:mm'); 
 
    if (startPreviousDay) startTime = startTime.subtract(1, 'day'); 
 
    
 
    endTime = moment.utc('07:00', 'HH:mm'); 
 
    if (endNextDay) endTime = endTime.add(1, 'day'); 
 

 
    result = currentTime.isBetween(startTime, endTime); 
 
    str += 'Test two: ' + result + '<br>'; 
 
    str += 'start 23:00 - end 07:00 <br>'; 
 
    str += 'startPreviousDay = true and endNextDay = true spans across three days so the result will true<br>'; 
 

 
    $('div').html(str); 
 

 
} 
 

 
test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> 
 

 
<div> 
 
</div>

+0

一个固定的日期,我只需要这个分布在两天,而不是三个(昨天和今天)的使用环境。感谢您的帮助,虽然 – edward

+0

您可以为昨天和今天设置'endNextDay = false'(或删除那段代码) –

+0

是的,我做到了。再次感谢 :) – edward

1

它看起来像有一些方法来get和与UTC设定日期。根据我的理解,格式化函数将解析输入,并将它所读取的内容转换为所需的格式,只要两者都有效。这应该允许您在一天中的日期,时间和一半之间进行测试。不仅如此,输入看起来也非常灵活,并且会采用各种输入类型和格式。希望这可以帮助!

编辑:我是新来的堆栈溢出的答案,因此我的片断很长,哑,对不起

var startTime, 
 
    endTime, 
 
    currentTime = moment.utc(), 
 
    result, 
 
    time, 
 
    str = ''; 
 

 
function test() { 
 
    startTime = moment.utc("2016-11-09 22:00"); 
 
    endTime = moment.utc("2016-11-10 10:30"); 
 

 
    str += "startTime " + startTime.format("MM DD hh:mm a"); 
 
    str += "<br>"; 
 
    str += "endTime " + endTime.format("MM DD hh:mm a"); 
 
    str += "<br>"; 
 

 
    result = currentTime.isBetween(startTime, endTime); 
 
    str += 'Test two: ' + result + '<br>'; 
 
    startTime = startTime.format("MM DD hh:mm a"); 
 
    endTime = endTime.format("MM DD hh:mm a"); 
 
    currentTime = currentTime.format("MM DD hh:mm a"); 
 

 
    str += "current time normal : " + currentTime; 
 
    str += "<br>"; 
 
    str += "start time normal : " + startTime; 
 
    str += "<br>"; 
 
    str += "end time normal : " + endTime; 
 
    str += "<br>"; 
 

 
    $('div').html(str); 
 
} 
 

 
test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> 
 

 
<div> 
 
</div>

+0

UTC时间需要这个,如果有可能 – edward

+0

此将是不断变化的,所以我不想设置此 – edward

相关问题