Количество дней в jQuery Datepicker - PullRequest
2 голосов
/ 31 января 2011

У меня есть два средства выбора даты в jQuery UI, и когда у них обоих выбраны даты, я бы хотел, чтобы разница между этими датами отображалась в отдельном input[type="text"], как только будет выбрана вторая дата.

Кроме того, я бы хотел, чтобы мой счет вычитал любые выходные дни и просто считал дни с понедельника по пятницу.

Мой (соответствующий) код выглядит следующим образом:

JS:

$('#firstday, #lastday').datepicker({
  dateFormat: 'dd/mm/yy'
});

XHTML:

<label for="firstday">First Day of Leave</label>
<input type="text" name="firstday" id="firstday" />

<label for="lastday">Last Day of Leave</label>
<input type="text" name="lastday" id="lastday" />

<label for="totaldays">Total Days</label>
<input type="text" name="totaldays" id="totaldays" />

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

1 Ответ

6 голосов
/ 31 января 2011

Примерно так должно работать:

$("#firstday, #lastday").datepicker({
  onSelect: function (){

    // Date will give time difference in miliseconds, that is why we divide with 1000*60*60*24

    var firstday = new Date($("#firstday").val().split("/").reverse().join(","));
    var lastday = new Date($("#lastday").val().split("/").reverse().join(",");
    $("#totaldays").val((lastday - firstday) / 86400000);        
  }
});

В консоли узла выдает:

> x = new Date("18/5/2010".split("/").reverse().join(","))
Mon, 17 May 2010 22:00:00 GMT
> y = new Date("18/5/2015".split("/").reverse().join(","))
Sun, 17 May 2015 22:00:00 GMT
> x-y
-157766400000
> y-x
157766400000
> (y-x)/86400000
1826

- РЕДАКТИРОВАТЬ -

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

Вы можете использовать .getMonth () и .getDate ()в сочетании с несколькими другими {} условиями для праздников.

var weekend_count = 0;
for (i = firstday.valueOf(); i <= lastday.valueOf(); i+= 86400000){
 var temp = new Date(i);
 if (temp.getDay() == 0 || temp.getDay() == 6) {
   weekend_count++;
 }
}

и в конце вы просто делаете

$("#totaldays").val( (lastday - firstday) / 86400000 - weekend_count);

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

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...