javascript angularjs date-format angular-ui-bootstrap timezone-offset

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>