首页 > 解决方案 > 日期之间每 X 天验证一次的功能

问题描述

我有两个 Date 对象。我需要一个函数来检查两个日期之间的天数是否与“每 X 天”匹配。因此,如果日期是 5 月 10 日和 13 日或 5 月 10 日和 5 月 19 日,如果我每 3 天查询一次,函数将返回 true。但如果我每 2 天查询一次,它会返回 false。

就像是

function validateGap(date1, date2, numberOfDays) {//...return true or false}

date1 = new Date("May 10, 2020 00:00:00"),
date2 = new Date("May 13, 2020 00:00:00");
validateGap(date1, date2, 3) // = TRUE
validateGap(date1, date2, 2) // = FALSE


date1 = new Date("May 10, 2020 00:00:00"),
date2 = new Date("May 22, 2020 00:00:00");

validateGap(date1, date2, 5) // = FALSE
validateGap(date1, date2, 4) // = TRUE

等等。

更新:我想出了这个。它肯定不是最注重性能的解决方案,但它确实有效。

function validateGap(date1, date2, numberOfDays) {
while (date1 <= date2) {
  date1.setDate(date1.getDate()+numberOfDays);
  if (date1.valueOf() === date2.valueOf()) return true;
}
  return false;
}

date1 = new Date("May 10, 2020 00:00:00"),
date2 = new Date("May 13, 2020 00:00:00");

validateGap(date1, date2, 2); // FALSE
validateGap(date1, date2, 3); // TRUE

标签: javascriptdatetime

解决方案


这测试至少日期1和日期2之间的天数......希望这是你需要的......

我忽略validateGap(date1, date2, 4) // = TRUE了,因为我看不到这背后的规则,如果你澄清一下,我可以合并它......

function validateGap(date1, date2, numberOfDays) {
  let diff = date1.valueOf() - date2.valueOf();
  if (diff < 0) {
    diff *= -1;
  }
  const diffInDays = diff / (1000 * 60*60*24);
  return diffInDays % numberOfDays === 0;
}

date1 = new Date("May 10, 2020 00:00:00"),
date2 = new Date("May 13, 2020 00:00:00");
console.log('validation result:',validateGap(date1, date2, 3), ' | expected result:', true) // = TRUE
console.log('validation result:',validateGap(date1, date2, 2), ' | expected result:',false) // = FALSE

date1 = new Date("May 10, 2020 00:00:00"),
date2 = new Date("May 22, 2020 00:00:00");
console.log('validation result:',validateGap(date1, date2, 5), ' | expected result:', false); // = FALSE
console.log('validation result:',validateGap(date1, date2, 4), ' | expected result:', true); // = TRUE


更新

op 要求每隔 2 天、3 天等一天......所以我更新了这条线

return numberOfDays >= diffInDays;

return diffInDays % numberOfDays === 0;

推荐阅读