2016-11-10 1 views
0

Je suis un peu confus à propos de celui-ci.javascript tableau date erreur

Ce morceau de code fonctionne bien mais a un comportement étrange.

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

Sortie

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) 

Comme vous pouvez le voir la date précédente dans le tableau change quand je pousse un nouveau. Quelqu'un peut-il aider/expliquer ceci?

+0

pourquoi faites-vous le 'eval' chose? – ArsalanDotMe

+0

lire ci-dessous. Merci d'avoir pris le temps d'explorer mon code :-) – user3242509

Répondre

1

C'est parce que vous poussez le même objetDate à plusieurs reprises sur la matrice, et en changeant son état.

Au lieu de cela, vous voulez créer un nouveau Date objet pour le lendemain:

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

Side note: Je ne suis pas sûr de ce que vous faites avec cet appel à eval , mais il y a certainement une meilleure façon de faire ce que vous avez à faire.

+0

Excellent, Votre solution fonctionne bien. J'ai aussi été difficile, c'était une référence, mais je ne pouvais pas comprendre. l'eval est d'analyser une chaîne de date renvoyée php en tant qu'objet de date.
Je vais le changer après mais pour l'instant ça marche bien. J'ai besoin de cet objet date dans un widget thx pour votre aide, B – user3242509

+0

désolé je ne pouvais pas voter pour vous. – user3242509