Memahami PHP DateTime::ubah suai Anomali dengan Bulan
Fungsi DateTime::ubah suai PHP, apabila digunakan untuk menambah atau menolak bulan, boleh mengakibatkan hasil yang tidak dijangka. Sebab untuk ini berpunca daripada gelagat wujud mekanisme manipulasi tarikh PHP.
Mengapa Ia Bukan Pepijat
Secara dalaman, apabila menambah atau menolak bulan, kenaikan atau pengurangan PHP nombor bulan (mis., 1 bulan akan menambah bilangan bulan sebanyak satu). Walau bagaimanapun, ia tidak menyemak bilangan hari sebenar dalam bulan yang terhasil. Akibatnya, jika bulan yang terhasil mempunyai lebih sedikit hari daripada tarikh asal, PHP membetulkan tarikh secara automatik dengan mengira baki hari dari bulan pertama bulan berikutnya.
Pertimbangkan contoh yang diberikan dalam soalan:
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-01-31 $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-03-03
Dalam contoh ini, penambahan 1 bulan pada mulanya menghasilkan tarikh 2001-02-31. Walau bagaimanapun, sejak Februari 2001 hanya mempunyai 28 hari, PHP membetulkan secara automatik tarikh hingga 3 Mac, yang mempunyai 31 hari.
Penyelesaian untuk Tingkah Laku yang Diingini
Untuk mendapatkan tingkah laku yang dijangkakan di mana 1 bulan mendahulukan tarikh kepada yang pertama bulan berikutnya, anda boleh menggunakan yang berikut strategi:
Atas ialah kandungan terperinci Mengapa PHP DateTime::modify Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menambah atau Menolak Bulan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!