Kode saya untuk menambahkan satu hari ke tanggal mengembalikan tanggal sebelum menambahkan:
2009-09-30 20:24:00
tanggal setelah menambahkan satu hari HARUS digulung ke bulan berikutnya:1970-01-01 17:33:29
<?php
//add day to date test for month roll over
$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;
?>
Saya telah menggunakan kode yang sangat mirip sebelumnya, apa yang saya lakukan salah di sini?
date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));
seperti pada jawaban yang diberikan @ w35l3y kepada Anda.sumber
Solusi paling sederhana:
sumber
echo (new DateTime('+1 day'))->format('Y-m-d H:i:s');
Unexpected T_OBJECT_OPERATOR” error in PHP
Ini Berhasil untuk Saya: Untuk Tanggal Sekarang
untuk setiap tanggal:
sumber
strtotime()
- sarang dapat menangani semuanya dalam satu panggilan:date('Y-m-d', strtotime($date . " +1 day"));
Coba ini
sumber
Mudah dibaca dan dimengerti caranya:
sumber
Saya selalu menambahkan 86400 (detik dalam sehari):
Ini mungkin bukan cara paling licik yang Anda bisa lakukan, tetapi berhasil!
sumber
Sementara saya setuju dengan jawaban Doug Hays, saya akan berpadu di sini untuk mengatakan bahwa alasan kode Anda tidak berfungsi adalah karena strtotime () mengharapkan INT sebagai argumen ke-2, bukan string (bahkan string yang mewakili tanggal)
Jika Anda mengaktifkan pelaporan kesalahan maks, Anda akan melihat ini sebagai kesalahan "Nilai numerik yang tidak terbentuk dengan baik" yang merupakan level E_NOTICE.
sumber
The
modify()
metode yang dapat digunakan untuk menambah bertahap ke yang adaDateTime
nilai.Buat
DateTime
objek baru dengan tanggal dan waktu saat ini:Setelah Anda memiliki
DateTime
objek, Anda dapat memanipulasi nilainya dengan menambahkan atau mengurangi periode waktu:Anda dapat membaca lebih lanjut di Manual PHP .
sumber
Kode berikut mendapatkan hari pertama bulan Januari tahun ini (tetapi ini bisa menjadi tanggal lain) dan menambahkan 365 hari ke hari itu (tetapi bisa menjadi N jumlah hari) menggunakan kelas DateTime dan metodenya memodifikasi () dan memformat () ):
sumber
Karena Anda sudah memiliki jawaban untuk apa yang salah dengan kode Anda, saya dapat membawa perspektif lain tentang bagaimana Anda dapat bermain dengan data secara umum, dan menyelesaikan masalah Anda secara khusus.
Seringkali Anda menemukan diri Anda menimbulkan masalah dalam hal solusi. Ini hanya salah satu alasan Anda berakhir dengan kode imperatif . Sangat bagus jika bekerja; ada alternatif lain yang bisa dipertahankan. Salah satunya adalah kode deklaratif . Intinya adalah menanyakan apa yang Anda butuhkan, alih-alih bagaimana menuju ke sana.
Dalam kasus khusus Anda, ini bisa terlihat seperti berikut. Pertama, Anda perlu mencari tahu apa yang Anda cari, yaitu menemukan abstraksi. Dalam kasus Anda, sepertinya Anda perlu kencan . Bukan sembarang tanggal, tetapi yang memiliki representasi standar. Katakanlah, tanggal ISO8601. Setidaknya ada dua implementasi: yang pertama adalah tanggal diuraikan dari string berformat ISO8601 (atau string dalam format lain sebenarnya), dan yang kedua adalah beberapa tanggal di masa depan yang merupakan hari kemudian. Dengan demikian, keseluruhan kode dapat terlihat seperti itu:
Untuk lebih banyak contoh dengan juggling datetime, periksa yang ini .
sumber