【问题标题】:Check if time is between two values with hours and minutes in javascript检查时间是否在javascript中的小时和分钟两个值之间
【发布时间】:2018-04-04 15:46:10
【问题描述】:

我需要检查时间是否介于开始时间和结束时间之间。所有时间都在同一天,所以日期并不重要。我可以比较小时数,但我不确定如何在开始和结束时间中加上分钟。

var thedate = new Date(); 
var dayofweek = thedate.getUTCDay(); 
var hourofday = thedate.getUTCHours(); 
var minutesofday = date.getMinutes();
function inTime() { if (dayofweek != 0 && dayofweek != 7 && (hourofday > 13 && hourofday < 20)) { return true; } return false; } 

如果我想检查时间是否在 13:05 和 19:57 之间,如何将分钟添加到我的 inTime 函数中?如果我将它们添加到 if 语句中,它将无法工作:

 function inTime() { if (dayofweek != 0 && dayofweek != 7 && ((hourofday > 13 && minutesofday > 5) && (hourofday < 20 && minutesofday < 57))) { return true; } return false; } 

【问题讨论】:

  • 我建议你查看 momentjs 库 momentjs.com。它有检查时间的方法。请参考这个stackoverflow.com/questions/23620498/…
  • 真的吗?反对者应该重新考虑他为什么在这个网站上。 #SOreadyToHelp !
  • 我真的很讨厌说“这是一个 X/Y 问题”的答案。不,这是一个声明的问题,表明我在寻求帮助之前试图解决它。如果人们不想要这样的 cmets,他们应该如何展示他们的所作所为?我检查了重复项,但没有一个包含 javascript 中的分钟问题。我在 PHP 中找到了解决方案,但这在 javascript 中没有必要工作。
  • @kevin 一切都在某种程度上与互联网上存在的数百万个问题中的一个略有相关。然而,(有时)很难找到它们,而且提问者可能没有像你一样的知识或技能,所以他们可能无法根据他们的用例调整答案。如果有一个真正的骗子,你的骗子投票在哪里?!
  • @kevin 但您需要将start 和end 日期设置为今天的日期......这比下面提出的答案稍长。

标签: javascript time


【解决方案1】:

如果它的14:04 你的条件将失败,因为4 更小5。最简单的方法可能是花一整天的时间:

 const start = 13 * 60 + 5;
 const end =  19 * 60 + 57;
 const date = new Date(); 
 const now = date.getHours() * 60 + date.getMinutes();

 if(start <= now && now <= end)
   alert("in time");

【讨论】:

  • 是的,这正是我所关心的。很好的答案。
  • @alligator 很高兴为您提供帮助 :)
  • 建议始终使用或不使用 UTC 方法,而不是混合搭配。 :-)
  • 显然有两个人决定对 每个 答案投反对票(三分之一投反对票)。 叹息
  • 如果结尾小于开头怎么办?比如早上 22 点到 03 点?
【解决方案2】:

如果您要检查“现在”时间是否介于两个时间之间,您可以将这些时间表示为 minutes-since-midnight (hours * 60 + minutes),检查非常简单。

例如,是在上午 8:30(含)到下午 5:00 之间吗? (独家):

var start =  8 * 60 + 30;
var end   = 17 * 60 + 0;

function inTime() {
  var now = new Date();
  var time = now.getHours() * 60 + now.getMinutes();
  return time >= start && time < end;
}

console.log(inTime());

以上使用当地时间;如果您想改为检查 UTC,只需使用等效的 UTC 方法即可。

【讨论】:

  • 如果结束日期在第二天,您只需将该时间添加 1440 分钟即可。 if (end
【解决方案3】:

将时间转换为毫秒,然后您可以轻松进行比较。

短版:

if(timeToCheck.getTime() >= startTime.getTime() &&
        timeToCheck.getTime() <= endTime.getTime()) {
    // ...
}

或者:

let startTimeMilli = startTime.getTime();
let endTimeMilli = endTime.getTime();
let timeToCheckMilli = timeToCheck.getTime();

// change >= to > or <= to < as you need
if (timeToCheckMilli >= startTimeMilli && timeToCheckMilli <= endTimeMilli) {
    // do your things
}

【讨论】:

  • 我想过这个问题,但它是否有效一次,或者我可以用它来每天检查吗?例如,如果我从 1970 年开始计数,我只能比较一天内的值 - 还是我遗漏了什么?
  • 再次检查答案
  • 为什么人们投票反对?
  • 我投赞成票不是因为你的答案是对的或写得好,而是因为它绝对不值得投三票。
  • 鳄鱼,我不明白你在问什么。使用毫秒,您无需担心日期部分。即使开始和结束时间在不同的日期,它也会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
相关资源
最近更新 更多