2017-01-03 7 views
0

У меня возникает следующая проблема: мне нужно сравнить текущую дату с определенным временем, учитывая день недели и время, как-то вроде это:Сравните текущую дату на определенный момент времени (будний день, чч: мм)

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

День недели решается с Date.now() getDay() и массив дней недели, но не может пройти через время часть.. Это не должно быть точное совпадение, а интервал в ± 20 минут.

+0

Предлагаю вам использовать [moment.js] (http://momentjs.com/). Библиотека существует для бэкэнд и интерфейса. –

+0

Я хотел бы избежать momentjs (любые рамки для этой задачи), потому что я чувствую себя немного излишним, чтобы использовать всю структуру для одной функции. –

ответ

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() принимает любое число ведущих нулей.

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

EDIT: Это позволит получить немного схематично около полуночи ...