2016-10-18 2 views
0

У меня есть дампикер с идентификатором «dtpicker».Предупреждение, если выбранная дата находится в пределах пяти рабочих дней с текущей даты (сегодня)

Мне нужно убедиться, что пользователь получит всплывающее окно с предупреждением, если выбранная дата находится в пределах пяти рабочих дней с текущего дня (сегодня).

У меня есть почти рабочий раствор:

function DateRule() 
{ 
    var dt = new Date(); 
    dt.setDate(dt.getDate() + 5); 
    var date = dt.toISOString().substring(0, 10); 
    userdatepick = NWF$("#" + datepicker).val(); 

    if (userdatepick < date) 
    { 
    alert("Reminder: you have selected a startdate that is earlier then five workingdays from todays date") 
    } 
} 

Я испытал это с датой сегодняшней и она работает почти как это предполагает, чтобы при выборе даты повсеместно в DatePicker между 2010-10-18 - 2010-10-22 Я получаю напоминание, которое верно. Когда я выбираю 2010-10-23, я не получаю напоминание, но это должно быть с момента выходного дня и не рабочего дня. 2010-10-25 не должен давать напоминание.

Может ли решение игнорировать выходные дни при добавлении пяти дней к текущей дате (сегодня). Например, когда я добавляю пять дней к моей переменной. Он перескакивает в выходные дни?

Любая помощь или советы оценили

+1

Посмотрите на http://momentjs.com/. Делает работу с датами намного проще. – Magrangs

+1

Возможный дубликат: http://stackoverflow.com/q/6499944/1493235 – JohannesB

+0

@JohannesB это 5-летний вопрос – Obsivus

ответ

1

Вы можете проверить что-то вроде ниже.

function validateDate(txtDate) { 
 

 
    var selectedDate = new Date(txtDate), 
 
    date = new Date(), 
 
    days = 5; 
 

 
    while (days > 0 && (date = new Date(date)) < selectedDate) { 
 
    date = date.setDate(date.getDate() + 1); 
 
    if (!isWeekend(date)) { 
 
     days -= 1; 
 
    } 
 
    } 
 

 
    if (days !== 0) { 
 
    console.log("Reminder: you have selected a startdate that is earlier then five workingdays from todays date"); 
 
    } 
 

 
} 
 

 
var isWeekend = function(date) { 
 
    var dt = new Date(date); 
 

 
    if (dt.getDay() == 6 || dt.getDay() == 0 /* check here for holidays */) { 
 
    return true; 
 
    } 
 

 
    return false; 
 
} 
 

 
validateDate("Oct 23, 2016");

+0

Обратите внимание, что метод * setDate * возвращает значение времени обновленной даты, поэтому 'date = date.setDate (date.getDate() + 1);' устанавливает * дату * на число, а не объект Date. – RobG

+0

@RobG Да, но в функции 'isWeekend' мы снова создаем объект даты – Thaadikkaaran

+0

« Мы »? Почему бы просто не удалить часть 'date =' и сохранить ее как Date? Тогда нет необходимости создавать новую дату в * isWeekend *. ;-) – RobG

Смежные вопросы