HTML Type d'entrée datetime-local définissant le mauvais fuseau horaire

J'ai créé une application qui prend des entrées HTML et passe par JavaScript pour créer un événement sur un événement de calendrier natif. Il prend le temps de <input type="datetime-local"> , et il se met dans un autre temps car il choisit un fuseau horaire différent. Si j'entre à 1 heure PM, il retourne 8 heure AM.

 <input type="datetime-local" id="startDate" name="startDate"> 

Et le JavaScript:

 var startDate = new Date($("#startDate").val()); 

Toute aide serait géniale. Je peux poster plus de code si nécessaire.

Le type d'entrée HTML5 datetime-local vous ramènera une valeur de chaîne , qui contient la date et l'heure au format ISO8601, avec une précision minime et sans décalage de fuseau horaire.

Par exemple: 2014-07-12T01:00

L'objet de date de JavaScript est notoirement incohérent lorsqu'il s'agit d'analyser des dates à partir de chaînes. Dans la plupart des implémentations, lorsque vous fournissez une chaîne comme celle-ci, elle suppose à tort que la valeur est en UTC. Par conséquent, l'objet Date vous récupérez sera ajusté par le décalage du fuseau horaire de votre ordinateur local.

Il existe deux approches pour résoudre le problème:

Option 1

Manipulez la chaîne à un format qui sera probablement interprété comme l'heure locale par l'analyseur de l'objet Date . Spécifiquement, remplacez les tirets ( - ) par des barres obliques ( / ) et remplacez le T par un espace.

 var s = $("#startDate").val(); var startDate = new Date(s.replace(/-/g,'/').replace('T',' ')); 

Option 2

Utilisez une bibliothèque avec des capacités d'analyse de date plus capables. Il y a plusieurs disponibles. L'un des plus populaires est moment.js .

Moment.js a beaucoup d'options, mais il se trouve que le comportement par défaut est exactement ce dont vous avez besoin. Vous pouvez donc simplement passer la chaîne au constructeur du moment sans aucun paramètre.

 var s = $("#startDate").val(); var startDate = moment(s).toDate();