使用javascript和jQuery UI datepicker获取工作日数 [英] Getting number of working days with javascript and jQuery UI datepicker

查看:131
本文介绍了使用javascript和jQuery UI datepicker获取工作日数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个日期戳,我可以从中计算星期六和星期日的天数。但是我想在星期五和星期六这样做。我尝试了一些不同的方法,但失败了。我很容易处理除星期六和星期天之外的日期,但不是星期五和星期六。以下是我的JavaScript代码 -

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

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

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

var startDate = document.getElementById(startDate)。
var startDate = new Date(startDate);

var endDate = document.getElementById(endDate)。
var endDate = new Date(endDate);

startDate.setHours(0,0,0,1); //午夜开始之后
endDate.setHours(23,59,59,999); //在午夜之前结束

var oneDay = 24 * 60 * 60 * 1000;
var diff = endDate - startDate; // datetime对象之间的毫秒数
var days = Math.ceil(diff / oneDay);

var weeks = Math.floor(days / 7);
var days = days - (weeks * 2);

//处理特殊情况
var startDay = startDate.getDay();
var endDay = endDate.getDay();

//删除以前未删除的周末。
if(startDay - endDay> 1)
days = days - 2;

//如果跨度从星期天开始,但在周六前结束,则删除开始日期
如果(startDay == 0&& endDay!= 6)
days = days - 1

//如果跨度在星期六结束但是从星期日开始,结束日期
if(endDay == 6&& startDay!= 0)
days = days - 1

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

我的HTML是:

 < form id =dateDifferencestyle =width:200px;> 
< input name =startDateid =startDatevalue =>
< input name =endDateid =endDatevalue =>
< / form>
< span id =result>< / span>


解决方案

  //计数从d0到d1(包括周五和周六)的日期
函数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);
}

其中 d0 d1 是开始和结束日期对象(具有相同的小时值)。


I have two datepicker from which I can calculate the number of day without counting Saturday and Sunday. But I want to do this for Friday and Saturday. I have tried some different ways but failed. It was easy for me to handle number of day excluding Saturday and Sunday but not for Friday and Saturday Following is my javascript code -

$(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;
        }

And my HTML is:

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

where d0 and d1 are the start and end Date objects (with same hour of day values).

这篇关于使用javascript和jQuery UI datepicker获取工作日数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆