2013-08-07 6 views
3

У меня проблема, когда пользователь выбирает диапазон дат. мне нужно выяснить, какие даты выпадают между этими двумя выбранными датами. они приходящая через JQuery с чем-то же просто, какполучить все даты, которые находятся между двумя датами

$('#from').val()+"-"+$('#to').val();

они перешли jqueryUI DatePicker и они просто выглядят как

08/07/2013 - 08/09/2012

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

08/07/2013, 08/08/2013, 08/09/2013

+1

"* Едут из jQueryUI DatePicker *" - какой-либо причине вы не можете использовать 'getDate' и работать с датой объектов вместо? Это сделает вашу жизнь намного легче. –

+0

если у меня есть два объекта даты, как я могу получить каждый из них? – patricko

ответ

18

Вы можете получить значения из вашего выбора даты с помощью метода getDate, так как это вернет вам объект Date. Затем, начиная с даты начала, добавьте «текущую» дату на 1 день и добавьте ее в массив до тех пор, пока текущая дата не станет такой же, как дата окончания.

Обратите внимание, что вам необходимо создать новую дату() при добавлении ее в массив between, иначе вы просто будете ссылаться на объект currentDate, и все ваши значения будут одинаковыми.

Working Demo

var start = $("#from").datepicker("getDate"), 
    end = $("#to").datepicker("getDate"), 
    currentDate = new Date(start.getTime()), 
    between = [] 
; 

while (currentDate <= end) { 
    between.push(new Date(currentDate)); 
    currentDate.setDate(currentDate.getDate() + 1); 
} 
+0

+1, но я думаю, что он ищет 'currentDate.setDate (currentDate.getDate());' и 'while (currentDate <= end)' – Icarus

+0

@Icarus Не уверен, что вы имеете в виду? – cfs

+0

Ваш код не включает фактические выбранные даты. Если вы выберете 8/7 и 8/9, он хочет получить 8/7, 8/8 и 8/9. Ваш код только толкает в массив 8/8. Следить? – Icarus

1
  //start of with getting the dates from your array 
       var between =[] 
       for (var i = 0; i < arrayOfHolsInfoTbl.length; i++){ 
        alert(holsInfoTblData[i].StartDate) 
        alert(holsInfoTblData[i].EndStart) 
        var datePickedStr1 = holsInfoTblData[i].StartDate; 
        var datePickedDate1 = new Date(datePickedStr1)//converts string to date object 

        var datePickedStr2 = holsInfoTblData[i].EndStart; 
        var datePickedDate2 = new Date(datePickedStr1) 

        while (datePickedDate1 <= datePickedDate2) { 
         between.push(new Date(datePickedDate1)); 
         datePickedDate1.setDate(datePickedDate1.getDate() + 1); 
        } 
       } 
      //loop through array and print all dates that have been added to array 
       for (var j = 0; j < between.length; j++) { 
        alert("This is all the dates " + between[j]) 
       } 
Смежные вопросы