Objectif: Trouver la local time
et UTC time offset
puis construire l'URL au format suivant.
Exemple d'URL: / Actions / Sleep? Duration = 2002-10-10T12: 00: 00−05: 00
Le format est basé sur la recommandation du W3C: http://www.w3.org/TR/xmlschema11-2/#dateTime
La documentation dit:
Par exemple, 2002-10-10T12: 00: 00−05: 00 (midi le 10 octobre 2002, heure d'été centrale et heure normale de l'Est aux États-Unis) est égal à 2002-10-10T17: 00: 00Z, cinq heures plus tard que le 2002-10-10T12: 00: 00Z.
Donc, sur la base de ma compréhension, je dois trouver mon heure locale par new Date () puis utiliser la fonction getTimezoneOffset () pour calculer la différence, puis l'attacher à la fin de la chaîne.
1. obtenez l'heure locale avec le format
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
production
2013-07-02T09:00:00
2.Obtenir le décalage horaire UTC par heure
var offset = local.getTimezoneOffset() / 60;
production
7
3. URL de construction (partie temporelle uniquement)
var duration = local + "-" + offset + ":00";
production:
2013-07-02T09:00:00-7:00
La sortie ci-dessus signifie que mon heure locale est le 02/07/2013 à 9h et que la différence par rapport à l'UTC est de 7 heures (UTC est 7 heures en avance sur l'heure locale)
Jusqu'à présent, cela semble fonctionner, mais que faire si getTimezoneOffset () renvoie une valeur négative comme -120?
Je me demande à quoi devrait ressembler le format dans un tel cas, car je ne peux pas comprendre à partir du document W3C. Merci d'avance.
getTimezoneOffset()
renvoie le signe opposé du format requis par la spécification que vous avez référencée.Ce format est également appelé ISO8601 , ou plus précisément RFC3339 .
Dans ce format, UTC est représenté avec un
Z
tandis que tous les autres formats sont représentés par un décalage par rapport à UTC. La signification est la même que celle de JavaScript, mais l'ordre de soustraction est inversé, donc le résultat porte le signe opposé.De plus, il n'y a pas de méthode sur l'
Date
objet natif appeléformat
, donc votre fonction dans # 1 échouera à moins que vous n'utilisiez une bibliothèque pour y parvenir. Reportez-vous à cette documentation .Si vous recherchez une bibliothèque qui peut fonctionner directement avec ce format, je vous recommande d'essayer moment.js . En fait, c'est le format par défaut, vous pouvez donc simplement le faire:
Il s'agit d'une solution multi-navigateurs bien testée et dotée de nombreuses autres fonctionnalités utiles.
la source
Je pense qu'il vaut la peine de considérer que vous pouvez obtenir les informations demandées avec un seul appel API à la bibliothèque standard ...
Vous devrez faire un échange de texte si vous souhaitez ajouter le délimiteur «T», supprimer le «GMT-» ou ajouter le «: 00» à la fin.
Mais alors vous pouvez facilement jouer avec les autres options si vous le souhaitez, par exemple. utilisez 12 heures ou omettez les secondes, etc.
Notez que j'utilise la Suède comme locale car c'est l'un des pays qui utilise le format ISO 8601. Je pense que la plupart des pays ISO utilisent ce format «GMT-4» pour le décalage du fuseau horaire autre que le Canada qui utilise l'abréviation du fuseau horaire, par exemple. "EDT" pour l'heure avancée de l'Est.
Vous pouvez obtenir la même chose de la fonction i18n standard plus récente "Intl.DateTimeFormat ()" mais vous devez lui dire d'inclure l'heure via les options ou il donnera simplement la date.
la source
C'est ma fonction pour le fuseau horaire des clients, c'est léger et simple
la source
Vérifie ça:
la source
Aucun moment.js nécessaire: Voici une réponse aller-retour complète, à partir d'un type d' entrée "datetime-local" qui génère une chaîne ISOLocal en secondes UTC à GMT et inversement:
la source
Juste mes deux envois ici
J'étais confronté à ce problème avec les datetimes, alors ce que j'ai fait est le suivant:
Enregistrez ensuite la date dans db pour pouvoir la comparer à partir d'une requête.
À installer
moment-timezone
la source
Ma réponse est une légère variation pour ceux qui veulent juste la date d'aujourd'hui dans le fuseau horaire local au format AAAA-MM-JJ.
Laisse moi être clair:
Mon objectif: obtenir la date du jour dans le fuseau horaire de l'utilisateur mais au format ISO8601 (AAAA-MM-JJ)
Voici le code:
Cela fonctionne car les paramètres régionaux de la Suède utilisent le format ISO 8601.
la source
Voici les fonctions que j'ai utilisées à cette fin:
la source
Vous pouvez y parvenir avec quelques méthodes d'extension simples. La méthode d'extension de date suivante renvoie uniquement le composant de fuseau horaire au format ISO, vous pouvez en définir un autre pour la partie date / heure et les combiner pour obtenir une chaîne complète de décalage date-heure.
Exemple d'utilisation:
Je sais que nous sommes en 2020 et que la plupart des gens utilisent probablement Moment.js maintenant, mais une simple solution de copie et de collage est encore parfois pratique.
(La raison pour laquelle j'ai divisé les méthodes de date / heure et de décalage est que j'utilise une ancienne bibliothèque Datejs qui fournit déjà une
toString
méthode flexible avec des spécificateurs de format personnalisés, mais n'inclut tout simplement pas le décalage du fuseau horaire. Par conséquent, j'ai ajoutétoISOLocaleString
pour quiconque sans ladite bibliothèque.)la source