Rumah > pembangunan bahagian belakang > tutorial php > Mengapa PHP DateTime::modify Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menambah atau Menolak Bulan?

Mengapa PHP DateTime::modify Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menambah atau Menolak Bulan?

Barbara Streisand
Lepaskan: 2024-12-05 08:22:13
asal
485 orang telah melayarinya

Why Does PHP DateTime::modify Produce Unexpected Results When Adding or Subtracting Months?

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
Salin selepas log masuk

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:

  • Semak Secara Manual Bulan Seterusnya: Ulangi hari dalam bulan yang terhasil dan tentukan sama ada tarikh yang dikehendaki wujud. Jika tidak, langkau ke bulan pertama pada bulan berikutnya.
  • Stanza Waktu Relatif PHP 5.3: Gunakan hari pertama sintaks yang diperkenalkan dalam PHP 5.3 untuk menyatakan secara eksplisit bahawa pengubahsuaian harus diteruskan tarikh ke hari pertama bulan berikutnya (cth., $date->modify('hari pertama seterusnya bulan')).

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan