2012-11-07 20 views
5

Các trường ngày tháng jquery jquery của tôi thiết lập ngày tối thiểu và tối đa cho trường bắt đầu và kết thúc, và điều đó có vẻ như tôi không muốn viết kịch bản để tính số ngày giữa ngày đã chọn. Tôi biết những người khác đã hỏi câu hỏi này, nhưng mọi sửa chữa tôi đã thử ở đây trên stackoverflow đã không hoạt động, tôi nghi ngờ vì các tùy chỉnh tôi có trong mã của tôi. Bất cứ ai có thể vui lòng giúp tôi tìm ra cách để lấy mã dưới đây và làm cho nó cung cấp cho tôi một giá trị trong một lĩnh vực đầu vào được gọi là #totaldays? Cảm ơnSố ngày giữa hai trường datepicker jquery với các thiết lập tùy chỉnh

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

Cảm ơn!

Trả lời

11

tôi đã tạo ra chức năng này mà tôi thường chạy trong onSelect chức năng của datepickers để tính toán những ngày giữa chúng:

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

đó dường như làm các trick hoàn hảo. Cảm ơn bạn adeneo! –

+0

Rất tuyệt, nhưng hãy kiểm tra moment.js ... Đó là một thư viện tuyệt vời cho mọi ngày/giờ liên quan. – Derrick

+0

the .getTime() !!! –

Các vấn đề liên quan