Dalam situasi tertentu saya ingin menambahkan 1 hari ke nilai variabel berformat DATETIME saya:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
Apa cara terbaik untuk melakukannya?
time()
denganstrtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.Ada lebih dari satu cara untuk melakukan ini dengan DateTime yang diperkenalkan di PHP 5.2. Tidak seperti menggunakan
strtotime()
ini akan memperhitungkan waktu musim panas dan tahun kabisat.$datetime = new DateTime('2013-01-29'); $datetime->modify('+1 day'); echo $datetime->format('Y-m-d H:i:s'); // Available in PHP 5.3 $datetime = new DateTime('2013-01-29'); $datetime->add(new DateInterval('P1D')); echo $datetime->format('Y-m-d H:i:s'); // Available in PHP 5.4 echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'); // Available in PHP 5.5 $start = new DateTimeImmutable('2013-01-29'); $datetime = $start->modify('+1 day'); echo $datetime->format('Y-m-d H:i:s');
sumber
+2 day
atau+2 days
(jelas+2 days
lebih semantik benar)The DateTime konstruktor mengambil parameter
string time
.$time
bisa menjadi hal yang berbeda, itu harus menghormati format datetime .Ada beberapa nilai yang valid sebagai contoh:
'now'
(nilai default)2017-10-19
2017-10-19 11:59:59
2017-10-19 +1day
Jadi, dalam kasus Anda, Anda dapat menggunakan yang berikut ini.
$dt = new \DateTime('now +1 day'); //Tomorrow $dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
sumber
strtotime
untuk mengubah string menjadi cap waktumisalnya:
$time = strtotime($myInput); $newTime = $time + 86400;
Jika hanya menambahkan 1 hari, maka menggunakan strtotime lagi mungkin berlebihan.
sumber
date()
zona waktu lokal diperhitungkan yang akan menangani pergeseran waktu siang hari.Kamu dapat memakai
$now = new DateTime(); $date = $now->modify('+1 day')->format('Y-m-d H:i:s');
sumber
Saya sarankan mulai menggunakan kelas Zend_Date dari Zend Framework . Saya tahu, ini agak offtopic, tapi saya akan suka cara ini :-)
$date = new Zend_Date(); $date->add('24:00:00', Zend_Date::TIMES); print $date->get();
sumber
Anda dapat menggunakan sebagai berikut.
$start_date = date('Y-m-d H:i:s'); $end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
Anda juga dapat mengatur hari sebagai konstan dan menggunakan seperti di bawah ini.
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days'); $end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
sumber
Menggunakan waktu permintaan server untuk Menambahkan hari. Bekerja seperti yang diharapkan.
25/08/19 => 27/09/19
$timestamp = $_SERVER['REQUEST_TIME']; $dateNow = date('d/m/y', $timestamp); $newDate = date('d/m/y', strtotime('+2 day', $timestamp));
Di sini '+2 hari' untuk menambahkan sejumlah hari.
sumber
Ada cara yang lebih ringkas dan intuitif untuk menambahkan hari ke tanggal php. Jangan salah paham, ekspresi php itu bagus, tetapi Anda selalu harus mencari cara mengatasinya di Google. Saya rindu fasilitas auto-complete untuk itu.
Inilah cara saya menangani kasus tersebut:
(new Future( new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'), new OneDay() )) ->value();
Bagi saya, ini jauh lebih intuitif dan pelengkapan otomatis bekerja di luar kotak. Tidak perlu google untuk mencari solusinya setiap saat.
Sebagai bonus bagus, Anda tidak perlu khawatir tentang memformat nilai yang dihasilkan, ini sudah dalam format ISO8601.
Ini adalah perpustakaan meringue, ada lebih banyak contoh di sini .
sumber