javascript - Angular JS: la fecha cambia cuando se envía a $ http: problema de zona horaria
angularjs date-format (1)
Tengo un problema extraño en el que una Date
cambia cuando se pasa a la API a través de $ http.put, sospecho que hay un problema de zona horaria:
Datepicker activa el evento ng-change - console.log:
Tue Jun 10 2014 00:00:00 GMT+0100 (GMT Summer Time)
Pasado a la API usando $ http.put Angular ...
Cuando golpea Fiddler:
StartDate=2014-06-09T23:00:00.000Z
Como puede ver, la fecha cambia del 10 de junio al 9 de junio.
¿Cómo puedo detener este cambio de fecha? ¿Es la zona horaria que causa el cambio? Tanto la API como el lado del cliente se ejecutan en Localhost.
Además de esto:
Cuando se hace clic en el campo por segunda vez y se selecciona la fecha de lanzamiento / fecha, esta segunda vez el problema no aparece:
Console.log:
Wed Aug 06 2014 22:00:00 GMT+0100 (GMT Summer Time)
Datos recibidos del violinista:
StartDate=2014-08-06T21:00:00.000Z
Creo que es un problema de TZ, porque la diferencia entre tu GMT+0100
y tu StartDate=2014-06-09T23:00:00.000Z
es de 5 horas .
.
La cuestión:
Su hora local es actualmente BST (British Summer Time) equivalente a GMT +1
Este será el momento predeterminado cuando realice su llamada a la API.
Sin embargo, la API fue escrita por Google en California y son bastante egocéntricas. Por lo tanto, están convirtiendo automáticamente la hora, ya que no está proporcionando ninguna date
formato de "instrucciones" .
En otras palabras, Chrome hace la conversión por usted muy bien cuando imprime en la console.log()
, pero cuando realiza su $http.put
, Angular , sin formato explícito para usted, realiza la llamada usando su TZ predeterminado (que es PST
)
.
Resolución
Debe forzar el formato de fecha a su localidad.
Plantilla angular
{{ date_expression | date : ''yyyy-MM-dd HH:mm:ss''}}
En JavaScript
$filter(''date'')(date, ''yyyy-MM-dd HH:mm:ss'')
utilizando localización
<html> <head> <title>My Angular page</title> <script src="angular-locale_en-uk.js"></script> ... </head> <body> ... </body> </html>