Angular JS-changements de Date lors de la soumission à la question $ http-Timezone
j'ai un problème étrange où un Date
change quand il est passé à L'API par $http.mettre, je soupçonne un fuseau horaire question:
déclencheur ng-change event - console.log:
Tue Jun 10 2014 00:00:00 GMT+0100 (GMT Summer Time)
transmis à L'API en utilisant $http angulaire.mettre...
Quand il frappe Fiddler:
StartDate=2014-06-09T23:00:00.000Z
comme vous pouvez le voir la date change du 10 juin au 9 juin.
Comment puis-je arrêter ce changement de date? Est-ce la fuseau horaire provoque le changement? L'API et le côté client fonctionnent sur Localhost.
suite à cela:
lorsque le champ est cliqué une deuxième fois et que le curseur de données est lancé / 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
1 réponses
je pense que c'est un TZ problème, b/c la différence entre votre GMT+0100
et StartDate=2014-06-09T23:00:00.000Z
5 heures.
.
La question:
Votre heure locale est actuellement BST (British Summer Time) équivalent à GMT +1
ce sera le moment par défaut lorsque vous lancerez votre appel API.
cependant, L'API a été écrite par Google en Californie, et ils sont plutôt égocentriques. Par conséquent, ils convertissent automatiquement le temps puisque vous ne fournissez aucun date
mise en forme "instructions".
en d'autres termes, Chrome fait la conversion pour vous bien lorsque vous imprimez en console.log()
, mais quand vous faites votre $http.put
,Angulaire, sans formatage explicite pour vous, fait l'appel en utilisant son TZ par défaut (qui est PST
)
.
Résolution
vous devez forcer la date mise en forme de vos paramètres régionaux.
gabarit angulaire
{{ date_expression | date : 'yyyy-MM-dd HH:mm:ss'}}
En JavaScript
$filter('date')(date, 'yyyy-MM-dd HH:mm:ss')
utilisation de la localisation
<html> <head> <title>My Angular page</title> <script src="angular-locale_en-uk.js"></script> ... </head> <body> ... </body> </html>