0

我使用了 pikaday 的 range 函数。

使用 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/

4

1 回答 1

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 实例,也设置为 30 May。

然后:

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

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

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

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

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

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

于 2016-04-29T12:50:21.563 回答