Pikaday日期范围不起作用

时间:2016-04-29 06:36:26

标签: javascript date datepicker pikaday

我使用了pikaday的范围功能。

使用onSelectI设置实际工作的日期范围。 这是我的例子:

onSelect: function(date) {
    var first_ = (date.getDate() - date.getDay())+1;
    var last_ = first_ + 4;

    var firstday = new Date(date.setDate(first_));
    var lastday = new Date(date.setDate(last_));

    picker.setStartRange(firstday);
    picker.setEndRange(lastday);

    picker.draw();

    var f_startdate = firstday.getDate()+'.'+(firstday.getMonth()+1)+'.'+firstday.getFullYear();
    var f_enddate = lastday.getDate()+'.'+(lastday.getMonth()+1)+'.'+lastday.getFullYear();
    var kw = getWeekNumber(date.getFullYear()+'/'+(date.getMonth()+1)+'/'+date.getDate());

    document.getElementById('calendar').value = f_startdate+' - '+f_enddate;
    // document.getElementById('calendar').value = 'KW: '+(kw+1);
}

但是当我选择03.06.2016时,范围设置为" 30.05.2016 - 03.05.2016"并且输入错误。也许任何人都可以帮助我。

以下是一个工作示例:https://jsfiddle.net/24aL9f21/1/

1 个答案:

答案 0 :(得分:2)

您的问题在这里:

var first_ = (date.getDate() - date.getDay())+1;

这会给你上周一的日期,但也会消极。 6月3日是星期五(第5天),因此 first _ 设置为:

3 - 5 + 1 = -1

然后:

var last_ = first_ + 4;

所以 last _ 设置为3.现在执行:

var firstday = new Date(date.setDate(first_));

您实际上将日期设置为-1的日期,即5月30日的月初之前的日期。 setDate 返回时间值,因此 firstday 是一个新的Date实例,也设置为5月30日。

然后:

var lastday = new Date(date.setDate(last_));

您将日期设置为5月3日(请记住,在上面的行中,您将其设置为5月30日)。同样, setDate 方法返回时间值,因此为该日期创建了一个新的Date对象。所以你得到5月30日和5月3日的日期(如果你检查日期,你也会设置它也是5月3日。)

QED(我的数学老师告诉我的是“很容易完成”)。 ; - )

所以你周一的代码很好。如果您想获得下周五的日期,请执行以下操作:

var lastday = date.setDate(date.getDate() + 4);

此处 lastday date 将引用相同的Date对象,但创建另一个副本似乎没有用。