Saya melakukan datObj.setMonth(1), tetapi bulannya disetel ke Maret? Bukankah 1 seharusnya Februari? Saya menggunakan Chrome 79.

Berikut bagian dari kode yang dimaksudkan untuk mengurai tanggal seperti YYYY-MM-DD HH:MM:SS (karena safari tidak dapat melakukannya secara asli)

var date = "2020-02-02 23:59:00"

        if (typeof date == 'string')
        {
            var dateParts = date.split(/[:-\s]+/);

            if (dateParts.length == 6)
            {
                dateObj = new Date();

                dateObj.setYear(dateParts[0]);
                var m = dateParts[1] - 1;
                console.log('m= ' + m);
                dateObj.setMonth(m);
                console.log('after setmonth, date= ' + dateObj);
                dateObj.setDate(dateParts[2]);
                dateObj.setHours(dateParts[3]);
                dateObj.setMinutes(dateParts[4]);
                dateObj.setSeconds(dateParts[5]);
            }
        }

console.log(dateObj);
alert(dateObj);
0
dougd_in_nc 30 Januari 2020, 23:36

2 jawaban

Jawaban Terbaik

Masalah Anda, seperti yang Anda bayangkan, adalah bahwa Anda menyetel bulan saat hari masih 30. Meskipun Anda dapat mengatasinya dengan menggunakan setFullYear dan melewatkan tahun, bulan, dan hari sekaligus, Anda benar-benar harus membuat seluruh objek Date dengan nilai yang benar di tempat pertama:

dateObj = new Date(dateParts[0], dateParts[1]-1, dateParts[2], dateParts[3], dateParts[4], dateParts[5]);

Atau lebih tepatnya menggunakan UTC sebagai zona waktu:

dateObj = new Date(Date.UTC(dateParts[0], dateParts[1]-1, dateParts[2], dateParts[3], dateParts[4], dateParts[5]));
1
Bergi 30 Januari 2020, 20:53

Baru tahu ini sebelum saya mengajukan. Hari ini tanggal 30 Januari 2020. Saya tidak bisa mengubah bulan menjadi Februari, karena tidak ada tanggal 30 Februari. Jadi, kode tersebut rusak pada tanggal 29 atau 30 setiap bulannya.

Dalam JavaScript, disarankan untuk melakukan

dateObj.setMonth(monthNum -1, dayNum)

Untuk mengatur hari dan bulan pada waktu yang sama untuk menghindari masalah ini

0
dougd_in_nc 30 Januari 2020, 20:36