2012-11-07 9 views
5

Moje pola datepicker jQuery ustawiają maksymalną i minimalną datę dla pól początkowych i końcowych i to wydaje się zrzucać moje próby napisania skryptu do obliczenia liczby dni między wybrane daty. Wiem, że inni zadali to pytanie, ale każda poprawka, którą wypróbowałem tutaj na stackoverflow, nie działa, podejrzewam, ze względu na dostosowania, jakie mam w moim kodzie. Czy ktoś może mi pomóc dowiedzieć się, jak wziąć kod poniżej i sprawić, że dostarczy mi wartość w polu wejściowym o nazwie #totaldays? DziękiLiczba dni między dwoma polami datepicker jquery z dostosowanymi ustawieniami

// Calendar Dates 
/* create an array of days which need to be disabled */ 
var disabledDays = ["11-13-2012","11-14-2012","11-15-2012","11-29-2012","11-30-2012"]; 

/* utility functions */ 
function nationalDays(date) { 
    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear(); 
    //console.log('Checking (raw): ' + m + '-' + d + '-' + y); 
    for (i = 0; i < disabledDays.length; i++) { 
    if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1 || new Date() > date) { 
     return [false]; 
    } 
    } 
    return [true]; 
} 


//Block the Weekends 
function noWeekendsOrHolidays(date) { 
    var noWeekend = $.datepicker.noWeekends(date); 
    if (noWeekend[0]) { 
     return nationalDays(date); 
    } else { 
     return noWeekend; 
    } 
} 

$(document).ready(function() { 
$.datepicker.setDefaults({dateFormat: 'mm/dd/yy',minDate: +1,changeMonth: true,changeYear: true,numberOfMonths: 2,constrainInput:true,beforeShowDay:nationalDays,}); 
     var selector = function (dateStr) { 
      var d1 = $('#datepicker_start').datepicker('getDate'); 
      var d2 = $('#datepicker_end').datepicker('getDate'); 
      var diff = 0; 
      if (d1 && d2) { 
       diff = Math.floor((d2.getTime() - d1.getTime())/86400000); // ms per day 
      } 
      $('#totaldays').val(diff); 
     } 
$('#datepicker_start').datepicker({onSelect: function(selectedDate) { 
    var minDate = $(this).datepicker('getDate'); 
    if (minDate) {minDate.setDate(minDate.getDate() + 3);}//min days requires 
    $('#datepicker_end').datepicker('option', 'minDate', minDate || 1); // Date + 1 or tomorrow by default 
}}); 
$('#datepicker_end').datepicker({minDate: 1, onSelect: function(selectedDate) { 
    var maxDate = $(this).datepicker('getDate');  
    if (maxDate) {maxDate.setDate(maxDate.getDate() - 1);} 
    $('#datepicker_start').datepicker('option', 'maxDate', maxDate); // Date - 1  
}}); 
    $('#datepicker_start,#datepicker_end').change(selector) 
}); 

Dzięki!

Odpowiedz

11

Stworzyłem tę funkcję, które zwykle działają w funkcji onSelect z datepickers do obliczania dni między nimi:

function days() { 
    var a = $("#datepicker_start").datepicker('getDate').getTime(), 
     b = $("#datepicker_end").datepicker('getDate').getTime(), 
     c = 24*60*60*1000, 
     diffDays = Math.round(Math.abs((a - b)/(c))); 
    console.log(diffDays); //show difference 
} 

FIDDLE

+0

To wydaje się rade doskonale. Dziękuję adeneo! –

+0

Bardzo fajne, ale sprawdź moment.js ... Jest to niesamowita biblioteka dla wszystkich związanych z datą/czasem. – Derrick

+0

the .getTime() !!! –

Powiązane problemy