【问题标题】:how can i count the range between 2 dates without counting the weekend in javascript我如何计算两个日期之间的范围而不计算javascript中的周末
【发布时间】:2017-08-07 19:53:17
【问题描述】:

我想计算 2 个日期之间的范围,而不用 javascript 计算周末。我有一些代码已经计算了它们之间的范围。但我坚持周末部分。 YII框架中CJuiDatePicker输入的日期

    <script>
    function calcDay(dt1, dt2, range){

    var msec1 = dt1;
    var date1 = new date(msec1);
    var msec2 = dt2;
    var date2 = new date(msec2);

    if(date1>0 || date2>0){
    range.val(isFinite(Math.round(date2-date1)/86400000) || 0);
    }
    };
    </script>

86400000 是以毫秒为单位的天

提前致谢

【问题讨论】:

标签: javascript yii datepicker datediff weekend


【解决方案1】:

您需要的函数是 getUTCDay()。

伪代码如下:
1 - 确定整周(天/7 截断)
2 - 计算工作日/周末:2 * 结果 = 周末,5 * 结果 = 工作日。
3 - 之后,剩余的日期和一周的开始日期将决定额外的 1 天或 2 天

希望对您有所帮助,如果您需要 javascript,请告诉我, - 约翰

已按要求编辑。注意:调整了您的原始版本以进行测试,您应该发现需要进行的更改才能恢复。

function calcDay(dt1, dt2, range)
{
    var msec1 = "October 13, 2014 11:13:00";
    var date1 = new Date(msec1);
    var msec2 = "October 13, 2013 11:13:00";
    var date2 = new Date(msec2);

    var days;
    var wdays;
    var startday;
    var nLeft;

    // neither should be zero
    if(date1>0 && date2>0) {
        days = Math.round( Math.abs((date2-date1)/86400000) );
        wdays = Math.round(days / 7) * 5;
        nLeft = days % 7;
        startday = (date1 > date2) ? date2.getUTCDay() : date1.getUTCDay();

        if (startday < 2) {
            wdays += Math.max(nLeft+startday-1,0);
        } else if (startday == 6) {
            wdays += Math.max(nLeft-2,0);
        } else if (nLeft > (7-startday)) {
            wdays += (nLeft-2)
        } else {
            wdays += Math.min(nLeft, 6-startday)
        }
    }
};

【讨论】:

  • 我可以有javascript吗? Cz 我尝试了很多,但仍然无法得到结果
  • @Trainee - 你去 - 注意:它被写来计算工作日,对于周末,你可以从总数中减去,或者自己计算对账(顺便说一句 - 工作日更复杂,为什么我提供那)
【解决方案2】:

我找到了自己的解决方案,但忘记分享了。我就是这样弄的

function myUpdate(dt1, dt2,range){
        var msec1 = dt1;            
        var date1 =  new Date(msec1);
        var msec2 = dt2;
        var date2 =  new Date(msec2);
        var diff = (isFinite(Math.round (date2 - date1) / 86400000) && Math.round (date2 - date1) / 86400000 || 0);
        var wEnd=0;

        if(date1>0 || date2>0){
                for(var i=0; i<=diff; i++){
                    if(date1.getDay() ==6 || date1.getDay()==0){
                        wEnd = wEnd + 1;
                    }
                    date1.setDate(date1.getDate() + 1);
                }
            }
        range.val(Math.round((diff-wEnd)+1));
    }; 

首先你应该计算不同的日期,然后date1 将检查它是星期天还是星期六。然后 date1 将加 1 直到 date1 的值等于 date2。如果date1 是/是星期六或星期日,wEnd 将获得 1。所以你可以用wEnd 减去diff。希望这可以帮助你们

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 2020-08-21
    • 1970-01-01
    • 2020-09-04
    • 2019-04-15
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多