JS angulaire – La date change lors de la soumission à $ http – Problème de fuseau horaire

NE MarcoAPORTAutPORTablesAPORTAachursuresVMMMMMFMMMMMMablesablesAvidasAvidasidenceTeaMFMMMMMMM TraeAFMMMMM TradiceAFMM TraeMFMMMM TraeMMMM TraeMMMM TraeMMMMM TraeMMMMMMM TrapeMediaAúenasAapsAvidasAvidasetas Marco Da Marco Da Marco Da Marco Da Marco Da Marco MarcoAandeEuvidence Da Marco Da Marco Marco Dawo Marco Da Marco Da Marco Marco Chambe

Datepicker déclenche l'événement ng-change – console.log:

Tue Jun 10 2014 00:00:00 GMT+0100 (GMT Summer Time)

Passé à l'API en utilisant Angular $ http.put …

Quand il frappe Fiddler:

StartDate=2014-06-09T23:00:00.000Z

Comme vous pouvez le constater, la date change du 10 juin au 9 juin.

Comment puis-je arrêter ce changement de date? Est-ce le fuseau horaire qui cause la modification? L'API et le côté client s'exécutent sur Localhost.

En plus de cela:

Lorsque le champ est cliqué une deuxième fois et la date / date choisie / date sélectionnée, cette deuxième fois le problème n'apparaît pas:

Console.log:

Wed Aug 06 2014 22:00:00 GMT+0100 (GMT Summer Time)

Fiddler données reçues:

StartDate=2014-08-06T21:00:00.000Z

StartDate=2014-06-09T23:00:00.000Z

.

Le problème:

Votre heure locale est actuellement BST (Heure d'été britannique) équivalent à GMT +1

Ce sera l'heure par défaut lorsque vous effectuez votre appel API.

Cependant, l'API a été écrite par Google en Californie, et elles sont plutôt égocentriques. Par conséquent, ils convertissent automatiquement le temps que vous ne fournissez pas de «instructions» de mise en forme de la date .

En d'autres termes, Chrome fait la conversion pour vous très bien lorsque vous imprimez sur console.log() , mais lorsque vous faites votre $http.put , Angular , sans formatage explicite pour vous, rend l'appel en utilisant TZ par défaut (c'est-à-dire PST )

.

Résolution

Vous devez forcer le formatage de la date dans votre locale.

  • Modèle angulaire

     {{ date_expression | date : 'yyyy-MM-dd HH:mm:ss'}} 
  • En JavaScript

     $filter('date')(date, 'yyyy-MM-dd HH:mm:ss') 
  • En utilisant la localisation

     <html> <head> <title>My Angular page</title> <script src="angular-locale_en-uk.js"></script> ... </head> <body> ... </body> </html>