2009-05-20 7 views
2

Ich verwende datepicker.iso8601Week(), um die Woche von einem ausgewählten Datum (in einem jQuery UI Datepicker) zu berechnen.datepicker.iso8601Week offset

Laut iso8601Week, eine Woche geht von Dienstag-Montag, und ich brauche es von Montag bis Sonntag zu gehen. Wie kann dies erreicht werden?

+0

Wo haben Sie gelesen, dass die Wochen dienstags nach ISO 8601 beginnen? Ich denke nicht, dass das der Fall ist. – Jonas

+0

Gemäß ISO 8601 beginnen sie montags, aber in meiner Implementierung haben sie irgendwie dienstags begonnen. Ich bin mir nicht wirklich sicher warum. –

Antwort

2

Hope this Ihnen helfen können.

Entschuldigung, ich hatte nicht genug Zeit, um die detaillierten Komponententests durchzuführen.

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

Start am Montag

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

Start am Sonntag

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

Es ist nicht das Datepicker, es ist datepicker.iso8601Week(), das die korrekte Woche für Montags zurückgeben sollte. –

0

Nach den JQuery UI Datepicker Dokumentation Wochen beginnen am Montag für die iso8601Week-Funktion, die die einzige vernünftige Sache ist, wenn es den ISO 8601 standard folgen soll. Wenn Sie ein anderes Verhalten bekommen, würde ich es für einen Fehler halten. Sie können sich die Implementierung here ansehen.

0

Ermitteln der Datepiker-Arbeit mit Drupal Calendar Ich fand heraus, dass die Filterung pro Woche falsch funktioniert, da die Funktion datepicker.iso8601Week ungültige Werte zurückgegeben hat. Nun, meine Woche begann am Mittwoch trotz aller Fakten wie offizielle Dokumente :) und das war das Problem. Ich beendete mit dem folgenden Trick:

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

Das Stück Code korrekt Wochennummer für Mo und Sun (sowie alle anderen Tage) auf Klick zurück. Wenn Sie datepicker als Inline-Filter-Schnittstelle verwenden, möchten Sie möglicherweise auch das angeklickte Datum beibehalten und den Kalender ab der angeklickten Position anzeigen. Ich mache es durch URLs der exakten Länge mit Monatsnamen am Ende:

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

Hoffnung, dass andere, wie ich Gott verdammt viel Zeit, herauszufinden, verbrachte helfen können, wie die Wochennummer zu beheben. Prost.