Mengubah Suai Bulan dengan PHP DateTime: Mendedahkan Gelagat Yang Dimaksudkan
Apabila bekerja dengan kelas DateTime PHP, menambah atau menolak bulan mungkin tidak selalu menghasilkan hasil yang diharapkan. Seperti yang diperingatkan oleh dokumentasi, "berhati-hati" terhadap operasi ini, kerana operasi ini tidak seintuitif yang mungkin kelihatan.
Menjelaskan Tingkah Laku yang Dimaksudkan
Pertimbangkan contoh yang diberikan dalam dokumentasi:
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); // Move ahead by 1 month echo $date->format('Y-m-d') . "\n"; // Prints 2001-01-31 $date->modify('+1 month'); // Advance another month echo $date->format('Y-m-d') . "\n"; // Prints 2001-03-03
Daripada menambah bulan seperti yang dijangkakan, hasilnya adalah lompat ke 3 Mac. Mengapa ini?
Inilah yang berlaku secara dalaman:
Mendapatkan Yang Dijangka Gelagat
Untuk mencapai gelagat yang diharapkan, di mana " 1 bulan" memajukan tarikh sebulan penuh, terdapat beberapa pilihan:
$d = new DateTime('2010-01-31'); $d->modify('first day of next month'); echo $d->format('F'), "\n"; // Correctly prints February
Kesimpulan
Memahami gelagat yang dimaksudkan bagi operasi pengubahsuaian bulan DateTime adalah penting untuk mengelakkan hasil yang tidak dijangka. Dengan menggunakan pengiraan manual atau ciri "hari pertama bulan depan", anda boleh mencapai fungsi manipulasi tarikh yang diingini dalam aplikasi PHP anda.
Atas ialah kandungan terperinci Mengapakah PHP's DateTime::modify(' 1 month') Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!