Bagaimana untuk memformat tarikh dengan zon waktu mengimbangi menggunakan ISO 8601 dalam JavaScript?
P粉054616867
P粉054616867 2024-03-25 15:40:11
0
2
743

Matlamat: Cari 本地时间UTC时间偏移 dan kemudian bina URL dalam format berikut.

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

Format ini berdasarkan cadangan W3C. Dokumentasi mengatakan:

Sebagai contoh, 2002-10-10T12:00:00−05:00 (tengah hari pada 10 Oktober 2002, Waktu Siang Tengah dan Waktu Standard Timur) Sama dengan 2002-10-10T17:00:00Z, iaitu lima jam lewat daripada 2002-10-10T12:00:00Z.

Jadi dari pemahaman saya, saya perlu mengira perbezaan melalui fungsi new Date() 查找本地时间,然后使用 getTimezoneOffset() dan kemudian tambahkannya pada hujung rentetan.

  1. Gunakan format untuk mendapatkan waktu tempatan

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

    var offset = local.getTimezoneOffset() / 60; // 7
  3. Bina URL (bahagian masa sahaja)

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

Keluaran di atas bermakna waktu tempatan saya ialah 9 pagi pada 2 Julai 2013, iaitu 7 jam berbeza daripada UTC (UTC adalah 7 jam lebih awal daripada waktu tempatan)

Setakat ini nampaknya berkesan, tetapi bagaimana jika getTimezoneOffset() mengembalikan nilai negatif (mis. -120)?

Saya tertanya-tanya bagaimana rupa format dalam kes ini kerana saya tidak dapat memahaminya daripada dokumentasi W3C.

P粉054616867
P粉054616867

membalas semua(2)
P粉842215006

getTimezoneOffset() Mengembalikan tanda bertentangan dalam format yang diperlukan oleh spesifikasi yang anda rujuk.

Format ini juga dikenali sebagai ISO8601, atau lebih tepat lagi RFC3339.

Dalam format ini, UTC diwakili oleh Z, manakala semua format lain diwakili oleh offset daripada UTC. Maksudnya sama seperti dalam JavaScript, tetapi susunan penolakan diterbalikkan, jadi hasilnya mempunyai tanda yang bertentangan.

Selain itu, kaedah asli Date 对象上没有名为 format, jadi fungsi dalam #1 akan gagal melainkan anda menggunakan perpustakaan untuk tujuan ini. Sila rujuk dokumen ini.

Jika anda sedang mencari perpustakaan yang boleh berfungsi dengan format ini secara langsung, saya syorkan mencuba moment.js. Sebenarnya, ini ialah format lalai, jadi anda boleh melakukan perkara berikut:

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

Ini adalah penyelesaian silang penyemak imbas yang diuji dengan baik dan disertakan dengan banyak ciri berguna yang lain.

P粉545956597

Ini ialah fungsi pembantu mudah yang memformat tarikh JS untuk anda.

function toIsoString(date) {
  var tzo = -date.getTimezoneOffset(),
      dif = tzo >= 0 ? '+' : '-',
      pad = function(num) {
          return (num 
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan