【问题标题】:check if "current time" is between 2 times. But also check for nights as the day before检查“当前时间”是否在 2 次之间。但也要检查前一天的夜晚
【发布时间】:2014-09-21 00:15:03
【问题描述】:

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

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

我发现这可以解决它:

    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 等 2 种字符串格式来做到这一点,因为我没有看到单独放置时间的选项

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

【问题讨论】:

  • 应该将日期与同年同月进行比较。现在,如果远远超过当前日期的年份,它将始终从该年份开始关闭。

标签: javascript angularjs time


【解决方案1】:

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

【讨论】:

  • 我觉得这样比较好,,,我要试试
  • 我猜.. 现在也必须是时间字符串?
  • 是的,now 需要采用相同的形式 - 我已经编辑了答案,以便为您提供 getMinutesNow 函数来获取当前时间.
  • 这是否适用于 start=10:00、end=02:00 和 now=01:00?好像现在
  • 这对于 0 点之后但开始之前的 now 不起作用。 (关于开始>结束的特殊情况)
【解决方案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>

【讨论】:

  • 你的答案在这里是最好的
【解决方案3】:

您可以这样做,获取当前时间。然后根据当前时间定义开始时间和结束时间,获取明天日期的年、月、日,将开始日期加 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 条件。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      相关资源
      最近更新 更多