63 votes

datepicker date décalée d'un jour

La date renvoyée par le sélecteur de date est décalée d'un jour. S'agit-il d'un problème dans mon code ou d'un bug ?

La date envoyée à date_picker est 2012-03-21. La date renvoyée par datepicker est Tue Mar 20 2012.

    var end_date = end_calendar.getFormatedDate("%Y-%m-%d");
    end_date = $.datepicker.formatDate('D M dd yy', new Date(end_date));

0 votes

Vous êtes sûr que c'est lié à l'indicateur de date ? document.write(new Date('2012-03-21')) imprime Tue Mar 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time) pour moi. Le bug de l'année bissextile ?

0 votes

Quelque chose à voir avec le formatage aussi, regardez ça : jsfiddle.net/fkSC5 Passing 2012-03-21 et 2012/03/21 à Date() donne des résultats à 4 heures d'intervalle.

0 votes

C'est vrai. La nouvelle Date('...') est décalée d'un jour.

10voto

Venu Morigadi Points 439

Cela est dû à la différence de fuseau horaire avec le format de date - aaaa-mm-jj.

new Date ('2015/07/10'); // returns: "Fri Jul 10 2015 00:00:00 GMT-0700 (Pacific Daylight Time)"

new Date ('2012-07-10'); // returns: "Thu Jul 09 2015 17:00:00 GMT-0700 (Pacific Daylight Time)" 

yyyy/mm/dd - ne prend pas en compte le fuseau horaire dans le calcul de l'heure locale.
yyyy-mm-dd - prend en compte l'heure lors du calcul de l'heure locale dans la fonction date de java script.
Ce problème peut être reproduit lorsque les fuseaux horaires du client (navigateur) et du serveur sont différents et que la différence entre le fuseau horaire et la date est de 1 jour.

Vous pouvez essayer cela sur votre machine en changeant l'heure dans différents fuseaux horaires où l'écart entre les deux devrait être >=12 heures.

3voto

cbyte Points 464

Après avoir essayé de nombreuses solutions, le code suivant a fonctionné pour moi, tiré de ( https://stackoverflow.com/a/14006555/1736785 )

   function createDateAsUTC(date) {
    return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}

3voto

cdena Points 11

Pour éviter d'obtenir un jour de congé, j'ai remplacé le - par / en utilisant .replace() lors de la création de la variable date comme ceci

var startDate = new Date(data[3].replace(/-/g, '\/'));

1voto

torple Points 27

Je n'ai pas la réputation de commenter, mais Venu M m'a donné un bon aperçu. Mon projet rencontre le même problème : en fonction de la syntaxe de ma saisie de date, la date est saisie ou décalée d'un jour. En élargissant et en regardant le format complet de la date, mes différents formats de date d'entrée sont retournés soit en UTC soit dans mon fuseau horaire local, selon la syntaxe. J'utilise Moment JS pour analyser mes dates, puis je renvoie un objet date pour validation avec Breeze. Je dispose soit d'une modale de saisie, soit d'un tableau à modifier. Je dois donc m'assurer que les deux sont analysés et validés de manière identique. Je vous suggère de vérifier que votre objet date est créé de la même manière, quelle que soit sa syntaxe ou son emplacement de saisie.

1voto

Toskan Points 1231
var myDate = $.datepicker.parseDate("yy-mm-dd", "2013-10-21");
..//do whatever with myDate now

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X