检查"当前时间"是2次之间。但也要检查前一天的夜晚

时间:2014-09-21 00:15:04

标签: javascript angularjs time

我有2次例如:10:00和1:00现在我想在javascript中检查当前时间...是否介于这两次之间。

问题是这种情况下的关闭时间是第二天所以它在开放时间之前。我怎么能以正确的方式做到这一点出于某些原因我无法解决这个问题。

我发现这可以解决它:

    var start = new Date(2012,6,20,13).getTime();
var now = new Date().getTime();
var end = new Date(2012,6,21,2).getTime();

if( (start < now ) && (now < end )) {
  console.log("opened");
}
else {
 console.log("closed");
}

但我怎么能用2种字符串格式来做,比如10:00和2:00,因为我没有看到单独放置时间的选项

var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

4 个答案:

答案 0 :(得分:7)

您可以使用这样的简单函数将时间转换为自0:00以来的分钟数:

function getMinutes(str) {
    var time = str.split(':');
    return time[0]*60+time[1]*1;
}

还有一个类似的功能,可以将当前时间转换为相同的形式,以便进行比较:

function getMinutesNow() {
    var timeNow = new Date();
    return timeNow.getHours()*60+timeNow.getMinutes();
}

然后转换开始和结束时间,如果发生关闭时间是在开放时间之前,则添加24小时。

var now = getMinutesNow();
var start = getMinutes('10:00');
var end = getMinutes('2:00');
if (start > end) end += getMinutes('24:00');

if ((now > start) && (now < end)) { // your code here

答案 1 :(得分:2)

这是我经过一些小小的尝试后得到的解决方案。在当前时间凌晨3:24,它输出正确的信息。将now数组更改为[13,00]也会给出正确的“已关闭”结果。让测试运行以确保其正常工作。

修改

jQuery仅仅是因为我已经死了。

编辑#2

我现在注意到(我的时间晚上9点)我的转换不起作用,它说“关闭”,它应该没有。到目前为止,这适用于我测试的任何和所有数字。

var start_time 	= [20,00]
var end_time 	= [12,00]
//We've got the two start times as an array of hours/minutes values.
var dateObj 	= new Date(); //I just feel dirty making multiple calls to new Date().etc
var now 		= [dateObj.getHours(),dateObj.getMinutes()]; //Gets the current Hours/Minutes 

if(end_time[0] < start_time[0] && now[0] < start_time[0]){
    start_time[0] -= 24; //This is something I came up with because I do a lot of math.
}else if(start_time[0] > end_time[0]){
    end_time[0]+=24;
}
var el=$('#result');

var start_string = to_hms_string(start_time); //the start string converted to a string format. Made comparisons easier.
var end_string = to_hms_string(end_time); //See Above
var now_string = to_hms_string(now); //Above
console.log(start_string, now_string, end_string);
var status = (start_string < now_string && now_string < end_string) ? "Open" : "Closed";
el.html(status);


//Function to_hms_string stands for "hour-minute-second" string. First name that came up.
function to_hms_string(timearr){
  var minutes = 60+timearr[1];
  var hours = "";
  if(Math.abs(timearr[0]) < 10){
    hours = "0";
  }
  hours = (timearr[0]<0) ? "-"+hours+Math.abs(timearr[0]) : hours+timearr[0];
  return hours+":"+minutes;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result">
  PlaceHolder
</div>

答案 2 :(得分:0)

你可以这样做,获取当前时间。然后根据获取年份,月份,明天日期的当前时间来定义开始时间和结束时间,并在开始日期添加1,参见下面的代码。然后你可以比较你有相同的条件的时间。祝你好运

var now = new Date();
var start = new Date(now.getFullYear(),now.getMonth(),now.getDate(),7).getTime();
var end = new Date(now.getFullYear(),now.getMonth(),now.getDate() + 1,2).getTime();
now = now.getTime();

if( now >= start && now < end) {
  console.log("opened");
}
else {
 console.log("closed");
}

<强> ***编辑** 获得年,月和日期后,您可以将当前时间转换为毫秒。然后使用你当前的if条件。

答案 3 :(得分:0)

Jhecht这件事就在这里:

if(end_time[0] < start_time[0] && now[0] < start_time[0]){
    start_time[0] -= 24; 
}else if(start_time[0] > end_time[0]){
    end_time[0]+=24;
}
它很棒。它有效,这是正确的答案。太棒了!