Comment formater une date avec décalage de fuseau horaire en utilisant ISO 8601 en JavaScript ?
P粉054616867
P粉054616867 2024-03-25 15:40:11
0
2
746

Objectif : Trouver 本地时间UTC时间偏移 puis construire l'URL au format suivant.

Exemple d'URL : /Actions/Sleep?duration=2002-10-10T12:00:00−05:00

Ce format est basé sur les recommandations du W3C. La documentation dit :

Par exemple, 2002-10-10T12:00:00−05:00 (midi le 10 octobre 2002, (heure avancée du Centre et heure normale de l’Est) Égal à 2002-10-10T17:00:00Z, soit cinq heures plus tard que 2002-10-10T12:00:00Z.

Donc, d'après ce que j'ai compris, je dois calculer la différence via la fonction new Date() 查找本地时间,然后使用 getTimezoneOffset(), puis l'ajouter à la fin de la chaîne.

  1. Utilisez format pour obtenir l'heure locale

    var local = new Date().format("yyyy-MM-ddThh:mm:ss"); // 2013-07-02T09:00:00
  2. Obtenir le décalage horaire UTC

    var offset = local.getTimezoneOffset() / 60; // 7
  3. Construire l'URL (partie horaire uniquement)

    var duration = local + "-" + offset + ":00"; // 2013-07-02T09:00:00-7:00

Le résultat ci-dessus signifie que mon heure locale est 9 heures du matin le 2 juillet 2013, soit 7 heures de différence par rapport à UTC (UTC a 7 heures d'avance sur l'heure locale)

Jusqu'à présent, cela semble fonctionner, mais que se passe-t-il si getTimezoneOffset() renvoie une valeur négative (par exemple -120) ?

Je me demande à quoi devrait ressembler le format dans ce cas car je n'arrive pas à le comprendre à partir de la documentation du W3C.

P粉054616867
P粉054616867

répondre à tous(2)
P粉842215006

getTimezoneOffset() Renvoie le signe opposé dans le format requis par la spécification à laquelle vous faites référence.

Ce format est également connu sous le nom de ISO8601, ou plus précisément RFC3339.

Dans ce format, UTC est représenté par Z, tandis que tous les autres formats sont représentés par un décalage par rapport à UTC. La signification est la même qu'en JavaScript, mais l'ordre de soustraction est inversé, le résultat a donc le signe opposé.

Également, des méthodes Date 对象上没有名为 format natives, donc la fonction du n°1 échouera à moins que vous n'utilisiez une bibliothèque à cet effet. Veuillez vous référer à ce document.

Si vous recherchez une bibliothèque capable de 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 faire ce qui suit :

var m = moment();    // get "now" as a moment
var s = m.format();  // the ISO format is the default so no parameters are needed

// sample output:   2013-07-01T17:55:13-07:00

Il s'agit d'une solution multi-navigateurs bien testée et dotée de nombreuses autres fonctionnalités utiles.

P粉545956597

Il s'agit d'une fonction d'assistance simple qui formate les dates JS pour vous.

function toIsoString(date) {
  var tzo = -date.getTimezoneOffset(),
      dif = tzo >= 0 ? '+' : '-',
      pad = function(num) {
          return (num 
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal