Moment: startOf('day')/endOf('day') tidak benar dengan UTC

Dibuat pada 24 Jan 2014  ·  3Komentar  ·  Sumber: moment/moment

Saat menggunakan waktu lokal, fungsi startOf('day')/endOf('day') berfungsi seperti yang diharapkan, tetapi ketika saya menggunakan waktu UTC, nilainya diperlakukan seperti waktu lokal.

http://jsfiddle.net/3d9eU/5/

moment.lang('nl');
var t1 = momen(); // waktu lokal
var t2 = t1.clone().utc(); // UTC

console.log('LOC valueOf = ' + t1.valueOf()); //1390557395517 -> Oke
console.log('UTC nilaiOf = ' + t2.valueOf()); // 1390557395517 -> Oke

console.log('LOC akhir hari valueOf = ' + t1.endOf('day').valueOf()); //1390604399999 -> Oke
console.log('UTC akhir hari valueOf = ' + t2.endOf('day').valueOf()); //1390607999999 -> TIDAK OK

console.log('LOC akhir hari _d = ' + t1.endOf('hari')._d); //Jum 24 Jan 2014 23:59:59 GMT+0100 (Waktu Standar Eropa Barat) -> OK
console.log('UTC akhir hari _d = ' + t2.endOf('hari')._d); //Sab 25 Jan 2014 00:59:59 GMT+0100 (Waktu Standar Eropa Barat) -> NOT OK

Salam,
Björn

Troubleshooting

Komentar yang paling membantu

Sepertinya Anda bertanya mengapa m.utc().endOf('day') memberi Anda akhir hari dalam UTC alih-alih dalam waktu lokal Anda. Itu dengan desain. utc() berarti "perlakukan waktu seperti itu UTC", di mana akhir hari adalah 23:59:59 _dalam UTC_, yang merupakan satu jam kemudian di Eropa barat. Ini sama dengan cara kerja offset() ; begitu momen berada dalam offset UTC tertentu, operasinya bekerja dalam konteks itu.

Dengan kata lain, ini mengatakan hal yang sangat berbeda (saya di pantai timur AS):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

Saya harap itu membantu.

Semua 3 komentar

Momen versi berapa ini? d bukan properti pada objek Moment (setidaknya, lagi). Ada _d , yang seharusnya tidak Anda rujuk dan yang akan sangat menyesatkan di sini. Adapun masalah aktual, ini berfungsi dengan baik untuk saya:

moment().utc().endOf('day').format(); //=> '2014-01-24T23:59:59+00:00'

Jadi saya kira Anda menggunakan versi prasejarah?

Saya menggunakan versi 2.5.0.

Properti '_d' adalah yang saya gunakan untuk melihat nilai apa yang terkandung dalam Moment selama debugging. (maaf atas kesalahpahaman). Tetapi mengapa properti ini berbeda untuk waktu lokal vs. UTC? Keduanya memiliki zona waktu +0100 sebagai ganti +0100 untuk waktu lokal dan +0000 untuk UTC. lihat http://jsfiddle.net/3d9eU/5/

Waktu setempat: Jum 24 Jan 2014 23:59:59 GMT+0100 (Waktu Standar Eropa Barat)
UTC: Sab 25 Jan 2014 00:59:59 GMT+0100 (Waktu Standar Eropa Barat) bukankah ini seharusnya Jum 24 Jan 2014 23:59:59 GMT+0100 (Waktu Standar Eropa Barat) dengan properti _isUTC = true ?

Sepertinya Anda bertanya mengapa m.utc().endOf('day') memberi Anda akhir hari dalam UTC alih-alih dalam waktu lokal Anda. Itu dengan desain. utc() berarti "perlakukan waktu seperti itu UTC", di mana akhir hari adalah 23:59:59 _dalam UTC_, yang merupakan satu jam kemudian di Eropa barat. Ini sama dengan cara kerja offset() ; begitu momen berada dalam offset UTC tertentu, operasinya bekerja dalam konteks itu.

Dengan kata lain, ini mengatakan hal yang sangat berbeda (saya di pantai timur AS):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

Saya harap itu membantu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat