簡體   English   中英

使用javascript和jQuery UI datepicker獲取工作日數

[英]Getting number of working days with javascript and jQuery UI datepicker

我有兩個日期選擇器,從中可以計算天數,而無需計算周六和周日。 但是我想在星期五和星期六這樣做。 我嘗試了一些不同的方法,但是失敗了。 我很容易處理不包括星期六和星期日的天數,但不處理星期五和星期六的天數以下是我的JavaScript代碼-

$(function() {
    $( "#startDate" ).datepicker({
        onSelect: calculateDays});
    });

    $(function() {
        $( "#endDate" ).datepicker({
            onSelect: calculateDays});
        });

        function calculateDays(startDate, endDate) {
            var form = this.form

            var startDate = document.getElementById("startDate").value;
            var startDate = new Date(startDate);

            var endDate = document.getElementById("endDate").value;
            var endDate = new Date(endDate);

            startDate.setHours(0,0,0,1); // Start just after midnight
            endDate.setHours(23,59,59,999); // End just before midnight

            var oneDay = 24*60*60*1000;
            var diff = endDate - startDate; // Milliseconds between datetime objects
            var days = Math.ceil(diff / oneDay);

            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)
                days = days - 2;

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

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

            if (days)
                document.getElementById("result").innerHTML=days;
        }

我的HTML是:

<form id="dateDifference" style="width:200px;">
    <input name="startDate" id="startDate" value="" >
    <input name="endDate" id="endDate" value="" >
</form>
<span id="result"></span>
// Count days from d0 to d1 inclusive, excluding Fridays and Saturdays
function calculateDays( d0, d1 )
{
    var ndays = 1 + Math.round((d1.getTime()-d0.getTime())/(24*3600*1000));
    var nsaturdays = Math.floor((ndays + d0.getDay()) / 7);
    return ndays - 2*nsaturdays + (d0.getDay()==6) - (d1.getDay()==5);
}

其中d0d1是開始和結束Date對象(具有相同的一天中的小時值)。

另一種方法。

for(var i = startDate ; i <= endDate ;i.setDate(i.getDate() + 1)){
            if( i.getDay() != 6 && i.getDay() != 0)
            {
                days = days + 1;
                }
            }

它會給您除周六和周日以外的幾天

javascript Date方法,getDay()將在星期日返回0,在星期一返回1,依此類推。

您應該能夠使用日期對象並檢查星期幾,並將它們從5(星期五)和6(星期六)的計數中排除。

http://www.w3schools.com/jsref/jsref_getday.asp

如果要計算一年中的工作日數:

const monthWorkDays = (year, month) => 
new Array(32 - new Date(year, month, 32).getDate())
    .fill(1)
    .filter(
        (id, index) =>
            [0, 6].indexOf(
                new Date(year, month, index + 1).getDay()) === -1
            ).length;

const yearWorkDays = (year) =>
new Array(12)
    .fill(1)
    .reduce((pv, cv, index) => pv + monthWorkDays(year, index), 0);

yearWorkDays(2017)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM