在jQuery datepicker中计算天数 - 特定周的一天

时间:2014-09-12 09:26:37

标签: javascript jquery jquery-ui datetimepicker

我有两个日期时间选择器(在http://trentrichardson.com/examples/timepicker处找到),并计算它们之间的工作日数。除了一个特定的一周,这似乎工作正常。

例如,如果您在第一个框中选择15/09/2014而在第二个框中选择22/09/2014,则它将计算5天,因为它们之间有5个工作日。太好了!

但是,选择20/10/2014和27/10/2014,它将计算4.此外,24/10/2014和27/10/2014的选择表明日期之间没有差异。< / p>

我在代码中尝试了很多小的改动(比如改变周末的方式等等)但是它很奇怪,因为它适用于我尝试的每一个案例,除非那个星期,所以我试图修复已经有效的代码。

我不明白为什么会这样,是吗?

JS小提琴:http://jsfiddle.net/xxbjL40q/

HTML

<h4>When are you off from?</h4>
<div class="form-group">
    <input type="text" class="form-control" id="firstday" name="firstday">
</div>

<h4>When are you back in the office?</h4>
<div class="form-group">
    <input type="text" class="form-control" id="backday" name="backday">
</div>

<p id="daysoffmessage">Please choose a day from both boxes. If you update your 'from' date after your 'back' date, please reselect your 'back' date to correct the day count.</p>

<input type="text" id="daycount" name="daycount">

JS

$('#firstday').datetimepicker({
    hourMin: 0,
    hourMax: 12,
    stepHour: 12,
    showMinute: false,
    showTime: false,
    dateFormat: 'dd/mm/yy',
    constrainInput: true,
    beforeShowDay: $.datepicker.noWeekends,
    firstDay: 1
});

$('#backday').datetimepicker({
    hourMin: 0,
    hourMax: 12,
    stepHour: 12,
    showMinute: false,
    showTime: false,
    dateFormat: 'dd/mm/yy',
    constrainInput: true,
    beforeShowDay: $.datepicker.noWeekends,
    firstDay: 1,
    onSelect: function(){
        // get the stuff
        var firstday = $('#firstday').datepicker('getDate');
        var backday = $('#backday').datepicker('getDate');

        // sort the weekends out
        var weekend_count = 0;
        for (i = firstday.valueOf(); i <= backday.valueOf(); i+= 86400000) {
            var temp = new Date(i);
            if (temp.getDay() == 0 || temp.getDay() == 6) {
                weekend_count++;
            }
        }

        // how many weekdays?
        var total = ((backday - firstday) / 86400000) - weekend_count;
        var total_1dp = total.toFixed(1);

        // put the info where I need it
        $('#daycount').val(total_1dp);
    }
});

1 个答案:

答案 0 :(得分:1)

<强>更新即可。因此,正如@ScottBrown所说,解决方法是将hourMin0更改为6。在将“日光标准时间”更改为“夏令时”期间,它有助于消除不正确的行为(周日计算两次),即使它不是通用的解决方案。

Fiddle

...我的modified fiddle在选择第二个日期时出现处理错误,并在第一个日期发生更改时重新计算值。