javascript - 使用 javascript 和 jQuery UI datepicker 获取工作日数

标签 javascript 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 对象(具有相同的小时值)。

关于javascript - 使用 javascript 和 jQuery UI datepicker 获取工作日数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21997637/

相关文章:

javascript - 日期选择器只显示月份

javascript - 将 HTML 标题属性的值作为 onclick 函数中的变量进行访问

javascript - 尝试从数字列表中提取数组值,但返回的值无效数组长度

javascript - 如何在 Angularjs 中将 json 响应显示为代码而不是字符串?

php - 如何使用日期选择器的值选择数据库中的数据?

reactjs - iOS DatePicker 在 React Native 中不显示

c# - DatePicker 其他格式的默认日期

javascript - 使用 React 路由器 React 中间件身份验证组件

javascript - 您如何读取此 json 数组?

javascript - 未定义不是函数 ImpressPages DatePicker