检查是否“;当前时间”;介于2倍之间.但也要像前一天一样检查夜晚

check if "current time" is between 2 times. But also check for nights as the day before

本文关键字:检查 前一天 一样 是否 时间 之间 2倍 介于      更新时间:2023-09-26

我有两次,例如: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");
}

但是我怎么能用两种字符串格式来做呢,比如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);

您可以使用这样一个简单的函数将您的时间转换为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

这是我经过一番努力后得到的解决方案。在当前时间凌晨3点24分,它输出正确的信息。将now数组更改为[13,00]也给出了"closed"的正确结果。对其进行测试以确保其正常工作。

编辑

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>

您可以这样做,获取当前时间。然后根据当前时间定义开始时间和结束时间,得到明天日期的年、月、日期,在开始日期上加1,请参阅下面的代码。然后你可以比较时间和你有相同的fi条件。祝好运

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条件。

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;
}

太棒了。它有效,这是正确的答案。干得好!