2017-01-03 82 views
0

我现在面临的以下问题:我有比较当前日期的特定时间点,在给定时间和工作日,不知何故像此:比较当前日期到某一时间点(平日,HH:MM)

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

的平日解决与Date.now()getDay()和平日的阵列,但通过在部分时间不能得到。它不应该是精确匹配,而应该是±20分钟的时间间隔。

+0

我建议你使用[moment.js](http://momentjs.com/)。该库存在后端和前端。 –

+0

我想避免使用任何框架(这个任务的任何框架),因为我觉得使用一个单一函数的整个框架有点矫枉过正。 –

回答

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()]); 
} 

注意,​​接受任意数量的前导零。

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

编辑:这将让午夜有点粗略...