2016-11-10 7 views
0

Ich bin ein bisschen verwirrt über diese.Javascript Array Datum Fehler

Dieses Stück Code funktioniert gut, hat aber seltsames Verhalten.

var tmpcurdte = eval(dataSource[i].startDate); 
tmpcurdte.setDate(tmpcurdte.getDate() + 1); 

while (tmpcurdte < tmpenddte) { 
    console.log("block date: " + tmpcurdte); 
    blockdayarray[blockdayarray.length] = tmpcurdte; 
    console.log("blockdayarray: " + blockdayarray); 
    tmpcurdte.setDate(tmpcurdte.getDate() + 1); 
} 

Ausgabe

block date :Sat Nov 12 2016 00:00:00 GMT+0100 (CET) 
blockdayarray :**Sat Nov 12** 2016 00:00:00 GMT+0100 (CET) 
block date :Sat Dec 31 2016 00:00:00 GMT+0100 (CET) 
blockdayarray :**Sun Nov 13** 2016 00:00:00 GMT+0100 (CET),**Sat Dec 31** 2016 00:00:00 GMT+0100 (CET) 
block date :Sun Jan 01 2017 00:00:00 GMT+0100 (CET) 
blockdayarray :Sun Nov 13 2016 00:00:00 GMT+0100 (CET),**Sun Jan 01 2017** 00:00:00 GMT+0100 (CET),**Sun Jan 01 2017** 00:00:00 GMT+0100 (CET) 
block date :Sat Feb 04 2017 00:00:00 GMT+0100 (CET) 
blockdayarray :Sun Nov 13 2016 00:00:00 GMT+0100 (CET),Mon Jan 02 2017 00:00:00 GMT+0100 (CET),**Mon Jan 02 2017** 00:00:00 GMT+0100 (CET),Sat Feb 04 2017 00:00:00 GMT+0100 (CET) 

Wie Sie das vorherige Datum in dem Feld sehen ändert sich, wenn ich ein neues schieben. Kann mir jemand helfen/erklären?

+0

Warum machst du das 'Eval'? – ArsalanDotMe

+0

lesen Sie unten. Danke, dass du dir die Zeit genommen hast, meinen Code zu erkunden :-) – user3242509

Antwort

1

Es ist, weil Sie das gleicheDate Objekt wiederholt auf das Array schieben und seinen Zustand ändern.

Stattdessen mögen Sie ein neues Date Objekt für den nächsten Tag erstellen:

var tmpcurdte = eval(dataSource[i].startDate); 
tmpcurdte.setDate(tmpcurdte.getDate()+1); 

while (tmpcurdte < tmpenddte) { 
    console.log("block date :" + tmpcurdte); 
    blockdayarray[blockdayarray.length]=tmpcurdte; 
    console.log("blockdayarray :" + blockdayarray); 
    tmpcurdte = new Date(tmpcurdte.getTime());  // *** 
    tmpcurdte.setDate(tmpcurdte.getDate() + 1); 
} 

Randbemerkung: Ich bin mir nicht ganz sicher, was Sie mit diesem Anruf zu eval tun , aber es gibt mit ziemlicher Sicherheit einen besseren Weg, um das zu tun, was immer Sie tun.

+0

Excellent, deine Lösung funktioniert gut. ich auch hart es war eine Referenzsache, aber konnte es nicht herausfinden. Das Eval ist eine PHP-zurückgegebene Datumszeichenfolge als Date-Objekt zu analysieren.
Ich werde es später ändern, aber für den Moment funktioniert es gut. Ich brauche dieses Datum Objekt in einem Widget thx für Ihre Hilfe, B – user3242509

+0

Entschuldigung, ich konnte nicht für Sie stimmen. – user3242509

Verwandte Themen