Heim  >  Fragen und Antworten  >  Hauptteil

Wie formatiere ich ein Datum mit Zeitzonenversatz mithilfe von ISO 8601 in JavaScript?

Ziel: Suchen 本地时间UTC时间偏移 und erstellen Sie dann die URL im folgenden Format.

Beispiel-URL: /Actions/Sleep?duration=2002-10-10T12:00:00−05:00

Dieses Format basiert auf W3C-Empfehlungen. In der Dokumentation steht:

Zum Beispiel 2002-10-10T12:00:00−05:00 (Mittag am 10. Oktober 2002, Zentrale Sommerzeit und Eastern Standard Time) Entspricht 2002-10-10T17:00:00Z, also fünf Stunden später als 2002-10-10T12:00:00Z.

Soweit ich weiß, muss ich die Differenz über die Funktion new Date() 查找本地时间,然后使用 getTimezoneOffset() berechnen und sie dann an das Ende der Zeichenfolge anhängen.

  1. Verwenden Sie format, um die Ortszeit abzurufen

    var local = new Date().format("yyyy-MM-ddThh:mm:ss"); // 2013-07-02T09:00:00
  2. UTC-Zeitversatz abrufen

    var offset = local.getTimezoneOffset() / 60; // 7
  3. URL erstellen (nur Zeitteil)

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

Die obige Ausgabe bedeutet, dass meine Ortszeit am 2. Juli 2013 9 Uhr morgens ist, was 7 Stunden von der UTC abweicht (UTC ist 7 Stunden vor der Ortszeit)

Bisher scheint es zu funktionieren, aber was ist, wenn getTimezoneOffset() einen negativen Wert zurückgibt (z. B. -120)?

Ich frage mich, wie das Format in diesem Fall aussehen soll, weil ich es aus der W3C-Dokumentation nicht herausfinden kann.

P粉054616867P粉054616867207 Tage vor677

Antworte allen(2)Ich werde antworten

  • P粉842215006

    P粉8422150062024-03-26 13:16:45

    getTimezoneOffset() 返回您引用的规范所需格式的相反符号。

    此格式也称为 ISO8601,或更准确地说是 RFC3339

    在此格式中,UTC 用 Z 表示,而所有其他格式均由 UTC 的偏移量表示。含义与 JavaScript 相同,但减法的顺序相反,因此结果带有相反的符号。

    此外,本地 Date 对象上没有名为 format 的方法,因此 #1 中的函数将失败,除非您使用库来实现此目的。请参阅此文档

    如果您正在寻找可以直接使用此格式的库,我建议尝试moment.js。事实上,这是默认格式,因此您可以简单地执行以下操作:

    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

    这是一个经过充分测试的跨浏览器解决方案,并且具有许多其他有用的功能。

    Antwort
    0
  • P粉545956597

    P粉5459565972024-03-26 12:26:52

    这是一个简单的辅助函数,可以为您格式化 JS 日期。

    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));

    Antwort
    0
  • StornierenAntwort