Rumah >pembangunan bahagian belakang >tutorial php >Mengapa PHP's DateTime::modify Berkelakuan Tidak Dijangka Apabila Menambah Bulan?
Apabila berurusan dengan tarikh dan pengubahsuai, kelas PHP DateTime mempersembahkan tingkah laku unik yang mungkin tidak selalu selari dengan jangkaan kita. Satu senario biasa melibatkan penambahan bulan dan pengendalian kelas boleh menjadi berlawanan dengan intuisi pada mulanya.
Pertimbangkan coretan kod berikut :
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n";
Jika kita mengharapkan kod itu awalkan tarikh ke 1 haribulan berikutnya dan penggantinya, kita akan bertemu dengan keputusan yang mengejutkan:
2001-01-31 2001-03-03
Daripada 2001-02-01 yang dijangkakan, kita mendapat 2001-01-31. Mengapa ini berlaku?
Kelas DateTime mengendalikan penambahan bulan dengan cara yang mengambil kira format tarikh dalaman. Apabila kita menambah sebulan kepada 31 Disember, tarikh dalaman menjadi 2001-02-31. Walau bagaimanapun, mengikut kalendar, Februari 2001 hanya mempunyai 28 hari, jadi PHP melaraskan secara automatik kepada 3 Mac.
Ini bukan pepijat tetapi sebaliknya tingkah laku yang dimaksudkan, memastikan tarikh sentiasa berada dalam julat yang sah.
Walaupun gelagat lalai PHP tidak selalunya ideal, terdapat penyelesaian yang elegan untuk melaraskannya:
Intervensi Manual:
Semak bulan berikutnya dan tambah secara manual bilangan hari yang betul untuk maju ke yang dikehendaki tarikh.
Pengubah suai "hari pertama" PHP 5.3:
Untuk PHP 5.3 dan lebih baru, anda boleh menggunakan pengubah suai "hari pertama" untuk maju ke hari pertama bulan berikutnya:
$d = new DateTime( '2010-01-31' ); $d->modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; // Outputs "February"
Atas ialah kandungan terperinci Mengapa PHP's DateTime::modify Berkelakuan Tidak Dijangka Apabila Menambah Bulan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!