angularjs 检查“当前时间”是否在2次之间,但也要像前一天一样检查晚上

abithluo  于 2023-09-30  发布在  Angular
关注(0)|答案(5)|浏览(149)

我举两个例子: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);
lyr7nygr

lyr7nygr1#

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

lvmkulzt2#

这是我经过一番折腾后得到的解决方案。在当前时间3:24 am,它输出正确的信息。将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>
guykilcj

guykilcj3#

你可以这样做,得到当前时间。然后根据当前时间定义开始时间和结束时间,获取明天的日期的年,月,日期,在开始日期上加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");
}

*****EDIT****获取年、月、日后,可将当前时间转换为米利斯。然后使用当前的if条件。

cgfeq70w

cgfeq70w4#

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

太棒了。这是正确的答案。干得好!

o7jaxewo

o7jaxewo5#

这是可行的。并且可以很容易地用代码中提到的不同的当前时间值进行测试

function isTimeInSchedule(schedule) {
  if (!schedule.match(/(\d){2}:(\d){2}-(\d){2}:(\d){2}/)) {
    throw new Error("Schedule not in format like this 23:20-04:50");
  }
  function getMinutes(str) {
    let time = str.split(":");
    return time[0] * 60 + time[1] * 1;
  }
  function getMinutesNow() {
    /* you can verify with these */
    // return getMinutes("04:48");
    // return getMinutes("04:52");
    // return getMinutes("23:22");
    // return getMinutes("23:18");
    let timeNow = new Date();
    return timeNow.getHours() * 60 + timeNow.getMinutes();
  }
  let values = schedule.split("-");
  let start = getMinutes(values[0]);
  let end = getMinutes(values[1]);
  let now = getMinutesNow();
  if (start > end) {
    if (now < end) {
      now += 24 * 60;
    }
    end += 24 * 60;
  }
  return now > start && now < end;
}

console.log(isTimeInSchedule("23:20-04:50"));
// console.log(isTimeInSchedule("04:50-23:20"));

相关问题