Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Menambah Satu Hari pada Tarikh Kadang-kadang Gagal Berbalik ke Bulan Seterusnya?

Mengapa Menambah Satu Hari pada Tarikh Kadang-kadang Gagal Berbalik ke Bulan Seterusnya?

Linda Hamilton
Linda Hamiltonasal
2024-11-22 00:45:12350semak imbas

Why Does Adding One Day to a Date Sometimes Fail to Roll Over to the Next Month?

Menambah Satu Hari ke Tarikh: Menyelesaikan Isu Pertukaran Tarikh

Menambah satu hari pada tarikh sepatutnya secara intuitif menghasilkan tarikh satu hari kemudian . Walau bagaimanapun, dalam sesetengah senario, penambahan tarikh mungkin menghasilkan hasil yang tidak dijangka, khususnya apabila peralihan bulan terlibat.

Masalah:

Pertimbangkan kod berikut yang menambah tarikh dengan satu hari:

$stop_date = date('Y-m-d H:i:s', strtotime('2009-09-30 20:24:00'));
echo 'date before day adding: '.$stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));
echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;

Apabila dilaksanakan, kod ini menghasilkan keputusan berikut, yang salah menunjukkan tarikh sebelum hari ditambah:

date before day adding: 2009-09-30 20:24:00
date after adding one day. SHOULD be rolled over to the next month: 2009-09-30 20:24:00

Penyelesaian:

Untuk menyelesaikan isu ini, dua pendekatan boleh digunakan:

Pendekatan 1: Menggunakan Rentetan Format yang Betul untuk strtotime

Fungsi strtotime PHP memerlukan rentetan format khusus untuk menghuraikan dan mengubah suai tarikh dengan betul. Dalam kod yang disediakan, rentetan format yang digunakan ('Y-m-d H:i:s') hanya membenarkan manipulasi jam dan minit. Untuk mendayakan peralihan bulan, rentetan format mesti termasuk penentu 'Y-m-d':

$stop_date = date('Y-m-d H:i:s', strtotime('2009-09-30 20:24:00 ' . '+1 day'));

Pendekatan 2: Menggunakan Kelas DateTime

Kelas DateTime yang diperkenalkan dalam PHP 5.2.0 menyediakan mekanisme yang lebih baik untuk manipulasi tarikh. Menggunakan objek DateTime, anda boleh menambah tarikh sehari secara terus:

$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s');
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');

Atas ialah kandungan terperinci Mengapa Menambah Satu Hari pada Tarikh Kadang-kadang Gagal Berbalik ke Bulan Seterusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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