Maison > Questions et réponses > le corps du texte
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.
Utilisez format
pour obtenir l'heure locale
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); // 2013-07-02T09:00:00
Obtenir le décalage horaire UTC
var offset = local.getTimezoneOffset() / 60; // 7
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粉8422150062024-03-26 13:16:45
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粉5459565972024-03-26 12:26:52
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 < 10 ? '0' : '') + num; }; return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate()) + 'T' + pad(date.getHours()) + ':' + pad(date.getMinutes()) + ':' + pad(date.getSeconds()) + dif + pad(Math.floor(Math.abs(tzo) / 60)) + ':' + pad(Math.abs(tzo) % 60); } var dt = new Date(); console.log(toIsoString(dt));