2016-04-29 5 views
0

Ich habe die Bereichsfunktion von Pikaday verwendet.Pikaday Datumsbereich funktioniert nicht

mit onSelectI den Datumsbereich, was tatsächlich funktioniert. Hier ist mein Beispiel:

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

Aber wenn ich die 2016.06.03 der Bereich auswählen wird auf den „2016.05.30 - 2016.03.05“ und der Eingang ist falsch. Vielleicht kann mir jemand helfen.

Hier ist ein funktionierendes Beispiel: https://jsfiddle.net/24aL9f21/1/

Antwort

1

Ihre Frage ist hier:

var first_ = (date.getDate() - date.getDay())+1; 

, dass Sie das Datum des vorherigen Montag gibt, sondern auch negativ wird. 3. Juni ist ein Freitag (Tag-Nummer 5), so first_ ist eingestellt auf:

3 - 5 + 1 = -1 

Dann:

var last_ = first_ + 4; 

so last_ bis 3. Nun wird gesetzt, wenn Sie tun:

var firstday = new Date(date.setDate(first_)); 

Sie setzen tatsächlich Datum zu einem Zeitpunkt von -1, die man vor dem sta rt des Monats so 30. Mai. setDate gibt den Zeitwert zurück, also firstday ist eine neue Date-Instanz, die ebenfalls auf den 30. Mai eingestellt ist.

Dann:

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

Sie Datum-3 können, sind Einstellung (nicht vergessen, dass in der Zeile über Sie es bis zum 30. Mai gesetzt). Auch hier gibt die Methode setDate den Zeitwert zurück, sodass für dieses Datum ein neues Date-Objekt erstellt wird. So erhalten Sie Daten für 30. Mai und 3. Mai (und wenn Sie Datum überprüfen, werden Sie es auch 3 Mai einstellen).

QED (was mein Mathematiklehrer mir sagte war "Ziemlich einfach fertig"). ;-)

Also ist dein Code für den Montag in Ordnung. Wenn Sie das Datum für den folgenden Freitag erhalten möchten, tun gerade:

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

Hier lastday und Datum das gleiche Datum-Objekt verweisen, die aber eine andere Kopie zu erstellen nicht sinnvoll erscheinen.