将当前日期与某个时间点(工作日,hh:mm)进行比较

时间:2017-01-03 09:22:25

标签: javascript node.js backend

我面临以下问题:我必须将当前日期与特定时间点进行比较,给定工作日和时间,不知何故,这样:

const myObj = {
  "weekday": "Tuesday",
  "timeOfDay": "10:30"
}

工作日通过Date.now()。getDay()和工作日数组解决,但无法通过时间部分。它不应该是精确匹配而是±20分钟的间隔。

2 个答案:

答案 0 :(得分:1)

我猜是导致这个问题的20分钟窗口?

var timeSplit = myObj.timeOfDay.split(':');
var totalMins = parseInt(timeSplit[0]) * 60 + parseInt(timeSplit[1]);

if(Math.abs(totalMins - (Date.now().getHours() * 60 + Date.now().getMinutes())) < 21) {
    // got a hit...
}
编辑:午夜时分会有点粗略......

答案 1 :(得分:1)

我建议将myObj.timeOfDay和当前时间转换为分钟,并检查差异的绝对值是否小于或等于20,例如:

var weekdays = ['Sunday', 'Monday', 'Tuesday',
  'Wednesday', 'Thursday', 'Friday', 'Saturday'];

var now = new Date();

if (myObj.weekday === weekdays[now.getDay()]) {
  var time = myObj.timeOfDay.split(':');

  var minutes    = Number(time[0]) * 60 + Number(time[1]);
  var nowMinutes = now.getHours()  * 60 + now.getMinutes();

  console.log(Math.abs(nowMinutes - minutes) <= 20);
} else {
  console.log(myObj.weekday, '!==', weekdays[now.getDay()]);
}

注意,Number()接受任意数量的前导零。