2009-05-20 72 views
2

我使用datepicker.iso8601Week()来计算选定日期(在jQuery UI日期选择器中)的星期。datepicker.iso8601Week抵消

根据iso8601Week,一周从周二到周一,我需要它从周一到周日。这如何实现?

+0

根据ISO 8601,您在哪里看过星期二开始的星期二?我不认为是这样。 – Jonas 2009-05-20 16:14:14

+0

根据ISO 8601,他们从星期一开始,但在我的实施中,他们以某种方式在星期二开始。我不确定为什么。 – 2009-05-28 14:05:42

回答

2

希望这可以帮助你。

对不起,我没有足够的时间做详细的单元测试。

function getDateRangeOfWeek(week){ 
    var date = new Date(); 
    var currentWeek = $.datepicker.iso8601Week(date); 
    date.setDate(date.getDate() - date.getDay() + 1 + (7 * (week - currentWeek))); 
    var result = []; 
    for(var i = 0;i < 7;i++){ 
     var d = new Date(); 
     d.setDate(date.getDate() + i) 
     result[i] = d; 
    } 
    return result; 
}; 
0

开始对周一

$('#date').DatePicker({ 
    starts: 1 
}); 

开始对周日

$('#date').DatePicker({ 
    starts: 0 
}); 
0

按照JQuery UI Datepicker文档星期开始在星期一的iso8601Week功能,这是唯一明智的事情,如果它应该遵循ISO 8601 standard。如果你得到不同的行为,我会认为它是一个错误。你可以看看执行here

0

获取与Drupal日历的日期匹配工作我发现每周过滤工作不正确,因为datepicker.iso8601Week函数返回无效值。那么,尽管所有的事实都像官方文档那样,我的周一周三开始了,那就是问题所在。我完成了下面的技巧:在点击

var date = $.datepicker.iso8601Week(new Date(dateText)); 
    var dateDay = $.datepicker.formatDate('D', new Date(dateText)); 
    if (dateDay == 'Mon' || dateDay == 'Sun') { 
    date = date+1; 
    } 

这段代码返回周一和Sun正确的周数(以及所有其他天)。如果您使用datepicker作为内联过滤器界面,您可能还想保留点击日期并从点击位置开始显示日历。我这样做是通过与月份名称的确切长度的网址结尾:

var setMon = window.location.pathname.slice(20); 
var setDay = window.location.pathname.slice(17,19); 
var setYear = window.location.pathname.slice(8,12); 
$('.datep').datepicker({ 
    defaultDate: $.datepicker.parseDate("dd MM y", setDay+" "+setMon+" "+setYear) 
}); 

希望能帮助别人,我就搞清楚如何解决这个星期数花了该死的很多时间。干杯。