Подсчитать общее количество дней отпуска, исключая праздники и выходные - PullRequest
0 голосов
/ 13 февраля 2019

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

Эта программа создана с использованием html и jquery datepicker,

Вот код JavaScript

var natDays = [
    [12, 25, 'id']
]; 
function nationalDays(date) {
    for (i = 0; i < natDays.length; i++) {
        if (date.getMonth() == natDays[i][0] - 1
            && date.getDate() == natDays[i][1]) {
        return [false, natDays[i][2] + '_day'];
        }
    }
    return [true, ''];
}

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

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

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

var datepicked = function() {

var from = $('#from');
var to = $('#to');
var vacation = $('#vacation');

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  

vacation.val(days);
}
}
</script>

Вот HTML-код

<input type="text" id="from" name="from"><br>
<input type="text" id="to" name="to"><br>
<input type="text" id="vacation" name="vacation"> <br/>

Когда меня нажимают, например, с пятницы на понедельник, он может рассчитывать 2 дня отпуска, но когда я хочу взять отпуск с воскресенья на пятницу, а в среду - выходнойКак и Рождество, он все еще считается 5 отпусков

1 Ответ

0 голосов
/ 06 марта 2019

Наконец, я могу сделать это с помощью SQL-запроса

Я использую SQL, чтобы создать таблицу выходных, а затем обработать для сопоставления с пользовательским вводом, который имеет выходной период между датой от и датой до

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...