web-dev-qa-db-fra.com

Pourquoi convertir new.Date () .toISOString () change l'heure?

J'insère une date dans une base de données dans deux formats différents. 

il s'agit d'insérer en tant que date/heure

    var mydate;
    mydate = new Date();
    document.getElementById('clockinhour').value = mydate.toISOString().slice(0, 19).replace('T', ' ');

Sortie A

2017-06-21 20:14:31 

cela insère en tant que varchar:

document.getElementById('clocked_in_time').value = Date();

Sortie B

Wed Jun 21 2017 16:14:31 GMT-0400 (Eastern Standard Time)

La sortie B correspond à l’heure correcte, mais j’ai besoin d’afficher la sortie A. Quelles sont les causes du changement d’heure lors de la conversion en ISOString? Comment puis-je réparer cela?

8
Sebastian Farham

Dans votre ceci insère en tant que bloc Datetime votre slice supprime la partie timezone (la Z à la fin de la sortie toISOString):

document.getElementById('clockinhour').value = mydate.toISOString().slice(0, 19).replace('T', ' ');

Comme l'a souligné @RobG dans la section commentaires, toISOString devrait toujours renvoyer la date au format UTC (Z ou +00:00).

RTFM : "Le fuseau horaire [offset] est toujours UTC, désigné par le suffixe Z",

L'heure "change" car elle est convertie en UTC lorsque vous appelez toISOString.

Si vous souhaitez obtenir une date ISO dans votre fuseau horaire, vous devez vous pencher sur ces deux questions: Comment formater ISO 8601 avec une date avec décalage du fuseau horaire en JavaScript? et Comment formater une date JavaScript

5
Dinei

Le temps ISO est libre de fuseau horaire. Vous remarquerez avec b que vous avez le fuseau horaire GMT-04: 00 si vous ajoutez ces quatre heures aux 16 heures de la date, vous obtenez 20

2
ControlAltDel