2012-11-07 12 views
5

jqueryのdatepickerフィールドは、開始フィールドと終了フィールドの最小値と最大値を設定しています。選択された日付。私は他の人がこの質問をしていることは知っていますが、ここでstackoverflowで試したすべての修正がうまくいかず、私のコードでカスタマイズしていると思われます。誰もが私の下のコードを取る方法を理解し、#totaldaysと呼ばれる入力フィールドで私に価値を提供することができますか?おかげでカスタマイズされた設定を持つ2つのjquery datepickerフィールドの間の日数

// 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) 
}); 

ありがとう!私は通常、それらの間の日数を計算するdatepickersのonSelect機能で実行し、この関数を作成しました

答えて

11

完全にトリックを行うように見えます
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

。アデネオありがとう! –

+0

非常にクールですが、moment.jsをチェックアウトしてください...日付/時刻関連の素晴らしいライブラリです。 – Derrick

+0

.getTime()!!! –

関連する問題