menambahkan 1 hari ke nilai format DATETIME


88

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?

Jawaban:


64

Jika Anda ingin melakukan ini di PHP:

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

Jika Anda ingin menambahkan tanggal di MySQL:

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

Bukankah ini akan memberi saya waktu saat ini? saya masih perlu menjaga waktu yang dimasukkan pengguna.
ian

Ya itu akan tetapi saya menandai Anda nilai apa yang harus Anda ubah ke waktu khusus. Anda bisa mengganti time()dengan strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

ini bukan musim panas- / musim dingin simpan! Silakan gunakan manipulasi tanggal / waktu penyimpanan DST
steven

210

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');

Ah, lingkaran da loop .
Funk Forty Niner

9
Jika menambahkan lebih dari satu hari, Anda dapat menggunakan bentuk jamak atau tunggal dan mendapatkan hasil yang sama misalnya: +2 dayatau +2 days(jelas +2 dayslebih semantik benar)
timhc22

Apa perbedaan praktis antara metode ini? Contoh pertama tampaknya yang paling sederhana dan paling semantik bagi saya.
BadHorsie

24

The DateTime konstruktor mengambil parameter string time. $timebisa 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

3
Menjawab tanpa penjelasan? Baca Bagaimana cara menulis jawaban yang baik?
Shashanth

11
  1. Gunakan strtotimeuntuk mengubah string menjadi cap waktu
  2. Tambahkan satu hari ke dalamnya (misalnya: dengan menambahkan 86400 detik (24 * 60 * 60))

misalnya:

$time = strtotime($myInput);
$newTime = $time + 86400;

Jika hanya menambahkan 1 hari, maka menggunakan strtotime lagi mungkin berlebihan.


Jadi saya perlu mengubahnya menjadi TIMESTAMP lalu kembali ke format DATETIME?
ian

4
Saya rasa perlu juga dicatat bahwa tidak setiap hari panjangnya 24 jam. Di banyak tempat di dunia, pergeseran waktu siang hari (waktu musim panas) berarti bahwa satu hari dalam setahun hanya 23 jam, dan satu hari lagi 25 jam.
nickf

UPS. Anda mengonversi waktu ke waktu menjadi stempel waktu, jadi ini berbasis UTC. Dan hari-hari UTC selalu sepanjang 24 jam. Saat mengonversi kembali dengan date()zona waktu lokal diperhitungkan yang akan menangani pergeseran waktu siang hari.
rabudde

5

Kamu dapat memakai

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

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)));

0

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.


0

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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.