<p>moment.date($day).month($month).year($year) berperilaku berbeda dari moment([$year, $month, $date])</p>

Dibuat pada 2 Nov 2015  ·  4Komentar  ·  Sumber: moment/moment

Tanggal diuraikan secara berbeda menggunakan dua metode penyetel ini.
Saat mengatur tanggal ke October 31, 2015 . Metode berantai mengembalikan 2015-10-01 sedangkan metode init mengembalikan 2015-10-31

var year = 2015;
var month = 9; //october
var day = 31;

console.log(moment().date(day).month(month).year(year).format('YYYY-MM-DD'));
//2015-10-01

console.log(moment([year, month, day]).format('YYYY-MM-DD'));
//2015-10-31

JS Fiddle: http://jsfiddle.net/dgnjer7z/

Komentar yang paling membantu

Perhatikan bahwa ini

$('#chained').val(moment().year(2015).month(9).date(31).format('YYYY-MM-DD'));

mengembalikan 2015-10-31

Sebenarnya momen meniru perilaku objek tanggal JS.

Pertama, Anda membuat moment() yang memberi Anda tanggal saat ini (3 November mulai hari ini). Anda mencoba mengatur hari ke 31 tetapi November hanya memiliki 30 hari, jadi objek tanggal asli JS "secara cerdas" menambahkan satu hari dan memindahkan tanggal ke 1 Desember (Anda dapat mengatur hari ke angka gila apa pun, seperti 42, dan JS akan melakukan aritmatika dengan menambahkan jumlah hari yang tepat dan memundurkan bulan dan tahun jika diperlukan, bukan praktik terbaik, akan lebih baik jika melempar).

Solusinya adalah dengan selalu mengatur tahun, bulan, hari, jam, menit, agar tidak terjadi masalah seperti ini.

Semua 4 komentar

Perhatikan bahwa ini

$('#chained').val(moment().year(2015).month(9).date(31).format('YYYY-MM-DD'));

mengembalikan 2015-10-31

Sebenarnya momen meniru perilaku objek tanggal JS.

Pertama, Anda membuat moment() yang memberi Anda tanggal saat ini (3 November mulai hari ini). Anda mencoba mengatur hari ke 31 tetapi November hanya memiliki 30 hari, jadi objek tanggal asli JS "secara cerdas" menambahkan satu hari dan memindahkan tanggal ke 1 Desember (Anda dapat mengatur hari ke angka gila apa pun, seperti 42, dan JS akan melakukan aritmatika dengan menambahkan jumlah hari yang tepat dan memundurkan bulan dan tahun jika diperlukan, bukan praktik terbaik, akan lebih baik jika melempar).

Solusinya adalah dengan selalu mengatur tahun, bulan, hari, jam, menit, agar tidak terjadi masalah seperti ini.

Fakta tentang penanganan overflow memang didokumentasikan:

http://momentjs.com/docs/#/get -set/date/

Mendapatkan atau menetapkan hari dalam sebulan.

Menerima angka dari 1 hingga 31. Jika rentang terlampaui, itu akan menggelembung hingga berbulan-bulan.

Padahal kelakuan di pojokan seperti milikmu ini memang mengejutkan.

Saya membuka PR di repo dokumentasi yang menjelaskan masalah umum ini
https://github.com/moment/momentjs.com/pull/244

Ya, saya tidak yakin ini bisa diperbaiki. Momen tidak tahu bahwa Anda akan mengatur bulan, jadi Momen mencoba untuk mengatur hari pada bulan berjalan, yang mungkin atau mungkin tidak memiliki 31. Ini mengabaikan niat Anda. Saya pikir PR dokumen @jakub-g bagus; mari kita lakukan itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat