Moment: Hapus zona waktu dari objek moment.js

Dibuat pada 4 Des 2015  ·  3Komentar  ·  Sumber: moment/moment

Saya menggunakan datetimepicker.js dan fungsi date mengembalikan objek moment.js . Ia melakukannya dengan offset UTC lokal di dalamnya dan tanggal asli saya memiliki offset yang berbeda.

Tanggal asli saya:

2015-10-01T15:00:00.000Z

Apa yang saya tampilkan pada pemilih waktu tanggal ( DD-MM HH:mm ):

01-10 15:00

Apa yang saya dapatkan:

2015-10-01T15:40:00+01:00

Apa yang saya inginkan:

2015-10-01T15:40:00+00:00

Perhatikan bagaimana saya menghapus offset +01 di bagian akhir.

Bagaimana saya bisa menerapkannya untuk UTC lokal mana pun? Ini, tanpa harus menghapus 01 secara manual (karena dapat berupa offset lokal lainnya tergantung pada lokasi pengguna).

Inilah yang saya miliki sejauh ini untuk mendapatkan tanggal, tetapi saya tidak tahu cara menghapus offset dengan menjaga waktu yang sama.

    var momentDate = timePicker.data("DateTimePicker").date();
    console.log(momentDate.format());
    //this prints  2015-10-01T15:40:00+01:00

Komentar yang paling membantu

const tmp = moment(valueAsDate).utc(true) - itulah yang Anda butuhkan yang mengabaikan zona waktu
maka Anda dapat menggunakan misalnya sebagai tmp.toISOString() .

Semua 3 komentar

Saat akan memformat tanggal asli menjadi tanggal zona waktu lokal. yaitu 02-02-2017 10:00:00+02:00 akan diformat menjadi 02-08-2017 16:00:00+08:00 jika sistem mesin menggunakan zona waktu +08:00.

Saya menulis fungsi untuk memformat tanggal asli dengan mengabaikan zona waktu:

/**
 * <strong i="7">@desc</strong> use moment to format a datetime
 * <strong i="8">@param</strong> string|date|timestamp datetime: the datetime to format
   the given datetime can have timezone, and the timezone will be kept in the process of output datetime
   i.e. formate('2017-09-08 11:24:00+08:00', 'D/M/YYYY HH:mm:ss Z') =>  8/9/2017 11:24:00 +08:00, as you see, +08:00 is kept, which is different from moment default behavior
   if timezone has not been given, local timezone will be used.
 * <strong i="9">@param</strong> string formatter: the target format you want to get
 * <strong i="10">@param</strong> string givenFormatter: moment allow developer to define your own formatter, i.e. DD/MM/YYYY HH,mm,ss which is not a statndard time format
 * <strong i="11">@return</strong> string new formatted datetime string
 * <strong i="12">@example</strong>:
   1. format(new Date(), 'YYYY-MM-DD HH:mm:ss')
   2. format(your_date, 'YYYY-MM-DD HH:mm:ss', 'DD/MM/YYYY HH,mm,ss')
 */
export function format(datetime, formatter, givenFormatter) {
  let localTimezoneOffset = timezoneOffset()
  let givenTimezoneOffset = moment.parseZone(datetime).utcOffset()

  if (givenTimezoneOffset !== 0) {
    return moment(datetime, givenFormatter).utcOffset(givenTimezoneOffset).format(formatter)
  }
  else {
    // big problem: we do not know whether timezone has not been given or it is +00:00
    // if its utc time is the same with itself, it means timezone has been given
    let u = utc(datetime, 'YYYY-MM-DD HH:mm:ss')
    let t = moment(datetime).parseZone(datetime).format('YYYY-MM-DD HH:mm:ss')
    if (u === t) {
      return moment(datetime, givenFormatter).utc().format(formatter)
    }
    else {
      return moment(datetime).format(formatter)
    }
  }
}

Kode sumber: https://github.com/tangshuang/moment-format

Gunakan fungsi ini untuk memformat tanggal mengabaikan logika format default saat ini. 02-08-2017 10:00:00+02:00 akan diformat seperti 2017/08/02 10:00:00+02:00.

const tmp = moment(valueAsDate).utc(true) - itulah yang Anda butuhkan yang mengabaikan zona waktu
maka Anda dapat menggunakan misalnya sebagai tmp.toISOString() .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat