2016-08-04 166 views
4

这不是日期,而是时间。使用jQuery检查当前时间是否落入时间范围(24小时)

不知道你怎么可能把两者混淆

我有什么到目前为止做:

此刻,我可以计算出当前时间是否落在只要时间范围因为它不是00:00(12AM)或更晚。

这是因为我目前的状况,如果仅着眼于:

current time > startTime and current time < endTime

if (currentTime > startTime && currentTime < endTime) { 
    green 
} else { 
    red 
} 

请参阅我已经包括更好地了解这一问题的片段。

var shiftStartWorking = '00:00', 
 
    shiftEndWorking = '08:00', 
 
    shiftStartNotWorking = '17:00', 
 
    shiftEndNotWorking = '00:00'; 
 

 
$('#current').text(moment().format('HH:mm')); 
 

 
if (moment().format("HH:mm") > shiftStartWorking && moment().format("HH:mm") < shiftEndWorking) { 
 

 
    $('#working').attr('style', 'color: green'); 
 

 
} else { 
 

 
    $('#working').attr('style', 'color: red'); 
 
}
<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.14.1/moment.min.js"></script> 
 

 
<div>Current Time: <span id="current"></span> 
 
</div> 
 

 
<br /> 
 

 
<div> 
 
    <span>Working version</span> - 
 
    <span id="working">00:00 - 08:00</span> 
 
</div>

+1

的可能的复制[Moment.js:日期之间的日期(http://stackoverflow.com/questions/14897571/moment -js-date-between-dates) – Weedoze

+1

这是日期,这是时间。如果您没有添加任何有用的内容,请不要添加任何内容。你最终会迷惑人。 – edward

+0

所以你有一个时间范围(最小和最大),你想知道**当前时间**是否在该范围内? –

回答

3

使用的时刻,你可以比较一刻对象,而不是字符串。您可以使用isBetween函数检查当前时间是否在您的范围内。

编辑:

时刻对象表示某一特定日期(日期&时间),如图我的片段反正解析字符串(只传递时间值)创建一个对象时刻为当天。您可以使用这些对象进行比较,因为它们都指向同一天(按构造)。

编辑#2: 我已经添加了检查开始和结束日期之间的关系来处理您在评论中提到的情况。我之前的回答不完整。

编辑#3: 创建一个函数做比较。

这里您片段的更新版本:

function isNowBetweenTime(startTime, endTime){ 
 
    // Creating moment objects for the current day at the given time 
 
    var startMom = moment(startTime, 'HH:mm'); 
 
    var endMom = moment(endTime, 'HH:mm'); 
 
    
 
    if (startMom.isAfter(endMom)){ 
 
    endMom.add(1, 'd'); 
 
    } 
 
    
 
    return moment().isBetween(startMom, endMom); 
 
} 
 

 
var shiftStartWorking = '16:00', 
 
    shiftEndWorking = '23:00', 
 
    shiftStartNotWorking = '17:00', 
 
    shiftEndNotWorking ='00:00'; 
 

 
$('#current').text(moment().format('HH:mm')); 
 

 
if(isNowBetweenTime(shiftStartWorking, shiftEndWorking)) { 
 
    $('#working').attr('style', 'color: green'); 
 
} else { 
 
    $('#working').attr('style', 'color: red'); 
 
} 
 

 
if(isNowBetweenTime(shiftStartNotWorking, shiftEndNotWorking)){ 
 
    $('#notWorking').attr('style', 'color: green'); 
 
} else { 
 
    $('#notWorking').attr('style', 'color: red'); 
 
}
<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.14.1/moment.min.js"></script> 
 

 
<div>Current Time: <span id="current"></span> 
 
</div> 
 

 
<br /> 
 

 
<div> 
 
    <span>Working version</span> - 
 
    <span id="working">16:00 - 23:00</span> 
 
</div> 
 

 
<br /> 
 

 
<div> 
 
    <span>Non Working version</span> - 
 
    <span id="notWorking">17:00 - 00:00</span> 
 
</div>

+0

阅读文档后,isBetween用于日期而不是时间,这是我需要的 – edward

+0

@edward我编辑了我的答案,试图解释为什么,在我看来,你仍然可以在你的用例中使用'isBetween'。 – VincenzoC

+0

我真的很感激帮助,但我认为这可能仍然是一个问题。例如:假设时间范围是17:00 - 01:00,当前时间是19:00。这应该是真的,这种情况下是否也适用于您的解决方案? – edward

相关问题