Pikaday 日期范围不起作用

Pikaday date range don't work

我使用了 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);
}

但是当我 select 03.06.2016 时,范围设置为“30.05.2016 - 03.05.2016”,输入错误。也许任何人都可以帮助我。

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

您的问题在这里:

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

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

然后:

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

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

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

所以你的星期一代码没问题。如果您想获得下周五的日期,只需执行:

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

这里lastdaydate会引用同一个Date对象,但是创建另一个副本似乎没有用。