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);
这里lastday和date会引用同一个Date对象,但是创建另一个副本似乎没有用。
我使用了 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);
这里lastday和date会引用同一个Date对象,但是创建另一个副本似乎没有用。