我使用了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/
答案 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对象,但创建另一个副本似乎没有用。