【问题标题】:Check if date/time is BETWEEN two other date/times Javascript检查日期/时间是否在另外两个日期/时间 Javascript 之间
【发布时间】:2019-04-25 06:10:04
【问题描述】:
var startDateTime = '15.04.2019 00:15';
var endDateTime = '17.05.2019 18:35';

var checkDateTime = '16.04.2019 13:15';

function(checkDateTime, startDateTime, endDateTime) {

// need codes to return true or false,.
// check "checkDateTime" is between "startDateTime" to "endDateTime"

}

【问题讨论】:

  • 你已经用momentjs标记了这个;你试过用吗?
  • 非常类似于:13291661。几乎是一个骗局。
  • 48405762 的可能欺骗。如果日期数组的大小为 1……那将回答这个问题……
  • 你需要提供一个minimal reproducible example(不,有一个空函数不算)

标签: javascript datetime momentjs


【解决方案1】:

试试这个代码:

var startDateTime = getDate('15.04.2019 00:15');
var endDateTime = getDate('17.05.2019 18:35');

var checkDateTime = getDate('16.04.2019 13:15');

function isBetween(checkDateTime, startDateTime, endDateTime) {

    return (checkDateTime >= startDateTime &&  checkDateTime <= endDateTime);

}

function toDate(str){
  var [ dd, MM, yyyy, hh, mm ] = str.split(/[. :]/g);
  return new Date(`${MM}/${dd}/${yyyy} ${hh}:${mm}`);
}

console.log(isBetween(checkDate,startDate,endDate));

要在同一天的某个时间间隔之间进行比较,请使用:-

var startTime = "00:35";
var endTime = "18:15";
var checkTime = "13:00";

function getMinutes(timeString){
    let [hh, mm] = timeString.split(":");
    return parseInt(hh)*60 + parseInt(mm);
}

function isTimeBetween(checkTime,startTime,endTime){
      checkTime = getMinutes(checkTime);
      return (checkTime >= getMinutes(startTime) && checkTime <= getMinutes(endTime));
}
console.log(isTimeBetween(checkTime,startTime,endTime));

【讨论】:

  • 如果我只想检查时间跨度?
  • @Mizhar Raja 时间跨度在哪个日期之间,在 checkDate 和 startDate 或 checkDate 和 endDate 之间
  • 没有日期。只有开始时间和结束时间。需要检查具体时间是否介于或否。
  • var startTime = '00:15'; var endTime = '18:35'; var checkTime = '13:15'; function isBetween(checkTime, startTime, endTime) { // 需要代码检查 }
  • @Mizhar Raja 查看时间间隔代码下的时间。也许这会对你有所帮助。
【解决方案2】:

您可以使用 new Date().getTime() 来获取自 Unix 纪元以来的毫秒数。这样您就可以将日期/时间与此函数的结果进行比较。你可以这样做:

return new Date(startDateTime).getTime() <= new Date(checkDateTime).getTime() <= new Date(endDateTime).getTime();

检查一下: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime

【讨论】:

  • 差不多..当我测试这个函数时,如果日期超出范围,它也会返回true。当我将checkDateTime 设置为'06/16/2019 13:15'(超出范围)时,函数返回true,但应该是false。我认为条件只需要用 && 分隔。
【解决方案3】:

我建议检查您的 checkDateTime 是否大于您的 startDateTime 并且小于 endDateTime。

function checkDateTime(checkDateTime, startDateTime, endDateTime) {
  return (new Date(startDateTime) >= new Date(checkDateTime))
      && (new Date(checkDateTime) <= new Date(endDateTime));
}

【讨论】:

  • 如果您选择此解决方案,我还建议将new Date(checkDateTime) 存储在变量中以提高性能。我有意省略了它以避免任何不必要的混淆
【解决方案4】:

这是另一种直接将方法添加到 Date 原型的选项:

var startDateTime = new Date('04/15/2019 00:15');
var endDateTime = new Date('05/17/2019 18:35');

var checkDateTime = new Date('04/16/2019 13:15');
var outOfRangeDate_EARLY = new Date('01/16/2019 13:15');
var outOfRangeDate_LATE = new Date('06/16/2019 13:15');

Date.prototype.inRange = function(startDate, endDate){
  var this_ms = this.getTime();
  return ( this_ms >= startDate.getTime() && this_ms <= endDate.getTime() )
}

/* Tests */
console.log('expected: true', 'actual:', checkDateTime.inRange(startDateTime, endDateTime))
console.log('expected: false', 'actual:', outOfRangeDate_EARLY.inRange(startDateTime, endDateTime))
console.log('expected: false', 'actual:', outOfRangeDate_LATE.inRange(startDateTime, endDateTime))

这样,您拥有var someDate 的任何日期,您都可以拨打someDate.inRange(startDate, endDate)。但是,有时,如果不小心,弄乱原生原型可能会再次困扰您。如果是这样,拥有其他人回答的单独功能非常好。

最后,在创建Date 对象之前正确格式化日期字符串非常重要,否则你会遇到很多Invalid Date。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2022-07-21
    • 2013-03-01
    • 2018-07-26
    相关资源
    最近更新 更多