2013-05-14 147 views
0

我已经尝试了几种方法来实现此功能,但是由于我对javascript的理解不够,没有成功。日期选择器 - 计算不包括假期和周末的天数

我只想让这个小小的脚本能够正确地工作,但我希望计算出来的天数没有包含在总和中的周末或节假日。任何帮助?

JAVASCRIPT:

$(function() { 
    $('#from').datepicker({ 
    showOnFocus: false, 
    showTrigger: '#calImg', 
    beforeShowDay: $.datepicker.noWeekends, 
    pickerClass: 'noPrevNext', 
    numberOfMonths: 1, 
     dateFormat: 'mm-dd-yy', 
     minDate: '0', 
     maxDate: '+1Y', 
       onSelect: function(dateStr) { 
        var min = $(this).datepicker('getDate'); 
        $('#to').datepicker('option', 'minDate', min || '0'); 
        datepicked(); 
     }}); 
    $('#to').datepicker({ 
    showOnFocus: false, 
    showTrigger: '#calImg', 
    beforeShowDay: $.datepicker.noWeekends, 
    pickerClass: 'noPrevNext', 
    numberOfMonths: 1, 
     dateFormat: 'mm-dd-yy', 
     minDate: '0', 
     maxDate: '+1Y', 
       onSelect: function(dateStr) { 
        var max = $(this).datepicker('getDate'); 
        $('#from').datepicker('option', 'maxDate', max || '+1Y'); 
        datepicked();            
     }}); 
}); 

var datepicked = function() { 
var from = $('#from'); 
var to = $('#to'); 
var nights = $('#nights'); 

var fromDate = from.datepicker('getDate') 

    var toDate = to.datepicker('getDate') 

    if (toDate && fromDate) { 
    var difference = 0; 
     var oneDay = 1000*60*60*24; 
     var difference = Math.ceil((toDate.getTime() - fromDate.getTime() + 1)/oneDay); 
     nights.val(difference); 

     } 
} 

HTML:

 <table width="100%" border="0" cellpadding="2"> 
     <tr> 
     <td nowrap>Vacation Request From</td> 
     <td><input type="text" id="from" name="from" size="28" style="width:194px; /*Tag Style*/" value="" ><div style="display: none;"> 
<img id="calImg" src="http://www.mywebsite.com/images/calendar-green.gif" alt="Popup" class="trigger"></div> To <input type="text" id="to" name="to" size="28" style="width:194px; /*Tag Style*/" value="" ><div style="display: none;"> 
<img id="calImg" src="http://www.mywebsite.com/images/calendar-green.gif" alt="Popup" class="trigger"> 

</div></td> 
     <td width="1">&nbsp;</td> 

    </tr> 
    <tr> 
     <td >Total Days Requested: </td> 
     <td colspan="5"><input type="text" id="nights" name="nights" style="width:50px; /*Tag Style*/" value="" readonly="readonly"></td> 
    </tr> 

    <tr> 
     <td colspan="6">&nbsp;</td> 
    </tr> 
    </table> 
+0

嗯,我继续尝试了大约100种不同的东西,我什么都没有...任何帮助将不胜感激。 –

+0

显然,我不能选择周末,但我仍然不知道如何让那些日子不在计算中。 –

+0

我假设我需要一个特殊的功能来查找周末的日子并将其删除。然后,我需要改变这一行:'var difference = Math.ceil((toDate.getTime() - fromDate.getTime()+ 1)/ oneDay);'我什至不能开始做任何事用我目前的设置找到工作。 –

回答

0

成功! This page大大帮助。所以,HTML与上面的jquery/javascript更新一样,而且我在做生意。

$(function() { 
    $('#from').datepicker({ 
    showOnFocus: false, 
    showTrigger: '#calImg', 
    beforeShowDay: $.datepicker.noWeekends, 
    pickerClass: 'noPrevNext', 
    numberOfMonths: 1, 
     dateFormat: 'mm-dd-yy', 
     minDate: '0', 
     maxDate: '+1Y', 
       onSelect: function(dateStr) { 
        var min = $(this).datepicker('getDate'); 
        $('#to').datepicker('option', 'minDate', min || '0'); 
        datepicked(); 
     }}); 
    $('#to').datepicker({ 
    showOnFocus: false, 
    showTrigger: '#calImg', 
    beforeShowDay: $.datepicker.noWeekends, 
    pickerClass: 'noPrevNext', 
    numberOfMonths: 1, 
     dateFormat: 'mm-dd-yy', 
     minDate: '0', 
     maxDate: '+1Y', 
       onSelect: function(dateStr) { 
        var max = $(this).datepicker('getDate'); 
        $('#from').datepicker('option', 'maxDate', max || '+1Y'); 
        datepicked();            
     }}); 
    }); 


    var datepicked = function() { 
    var from = $('#from'); 
    var to = $('#to'); 
    var nights = $('#nights'); 

var startDate = from.datepicker('getDate') 

var endDate = to.datepicker('getDate') 


// Validate input 
if (endDate && startDate) { 


// Calculate days between dates 
var millisecondsPerDay = 86400 * 1000; // Day in milliseconds 
startDate.setHours(0,0,0,1); // Start just after midnight 
endDate.setHours(23,59,59,999); // End just before midnight 
var diff = endDate - startDate; // Milliseconds between datetime objects  
var days = Math.ceil(diff/millisecondsPerDay); 

// Subtract two weekend days for every week in between 
var weeks = Math.floor(days/7); 
var days = days - (weeks * 2); 

// Handle special cases 
var startDay = startDate.getDay(); 
var endDay = endDate.getDay(); 

// Remove weekend not previously removed. 
if (startDay - endDay > 1)   
    var days = days - 2;  

// Remove start day if span starts on Sunday but ends before Saturday 
if (startDay == 0 && endDay != 6) 
    var days = days - 1 

// Remove end day if span ends on Saturday but starts after Sunday 
if (endDay == 6 && startDay != 0) 
    var days = days - 1 

nights.val(days); 
    } 
    } 
相关问题