aggiungendo 1 giorno a un valore di formato DATETIME


88

In determinate situazioni, voglio aggiungere 1 giorno al valore della mia variabile formattata DATETIME:

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

Qual è il modo migliore per farlo?

Risposte:


64

Se vuoi farlo in 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));

Se vuoi aggiungere la data in MySQL:

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

questo non mi dà l'ora corrente? devo ancora mantenere il tempo immesso dal mio utente.
ian

Sì, ma ti ho indicato quali valori dovresti modificare per l'ora personalizzata. Puoi semplicemente sostituire time()con strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

questo non è il risparmio estivo / invernale! Si prega di utilizzare la modifica della data / ora di salvataggio dell'ora legale
Steven

211

C'è più di un modo per farlo con DateTime, introdotto in PHP 5.2. Diversamente dall'utilizzo, strtotime()questo terrà conto dell'ora legale e dell'anno bisestile.

$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, un loop da loop .
Funk Forty Niner

9
Se aggiungi più di un giorno, puoi usare il plurale o il singolare e ottenere lo stesso risultato es: +2 dayo +2 days(ovviamente +2 daysè semanticamente più corretto)
timhc22

Quali sono le differenze pratiche tra questi metodi? Il primo esempio mi sembra il più semplice e semantico.
BadHorsie

24

Il costruttore DateTime accetta un parametro string time. $timepossono essere cose diverse, deve rispettare il formato datetime .

Ci sono alcuni valori validi come esempi:

  • 'now' (il valore predefinito)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

Quindi, nel tuo caso puoi usare quanto segue.

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02

3
Rispondere senza spiegazioni? Leggi Come scrivo una buona risposta?
Shashanth

11
  1. Utilizzare strtotimeper convertire la stringa in un timestamp
  2. Aggiungi un giorno (ad esempio: aggiungendo 86400 secondi (24 * 60 * 60))

per esempio:

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

Se si aggiunge solo 1 giorno, è probabile che utilizzare di nuovo strtotime sia eccessivo.


Quindi devo convertirlo in un TIMESTAMP e poi di nuovo in un formato DATETIME?
ian

4
Immagino che dovrebbe anche essere notato che non tutti i giorni durano 24 ore. Nella maggior parte dei luoghi del mondo, l'ora legale (ora estiva) significa che un giorno all'anno è di sole 23 ore e un altro giorno è di 25 ore.
nickf

UPS. Converti un datetime in un timestamp, quindi è basato su UTC. E i giorni UTC durano sempre 24 ore. Quando si riconverte con date()il fuso orario locale viene preso in considerazione il fatto che si prenderà cura dell'ora legale.
rabudde

5

Puoi usare

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

1

Suggerisco di iniziare a utilizzare le classi Zend_Date da Zend Framework . Lo so, è un po 'fuori tema, ma mi piacerà così :-)

$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();

puoi per favore vedere il mio (quesiton) correlato [stackoverflow.com/q/61421783/8919244 ] ?
Moeez

1

Puoi usare come segue.

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

Puoi anche impostare i giorni come costanti e utilizzare come di seguito.

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

Utilizzo del tempo di richiesta del server per aggiungere giorni. Funzionando come previsto.

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

Qui "+2 giorni" per aggiungere un numero qualsiasi di giorni.


0

C'è un modo più conciso e intuitivo per aggiungere giorni alla data php. Non fraintendermi, quelle espressioni php sono fantastiche, ma devi sempre cercare su Google come trattarle. Mi manca la funzione di completamento automatico per questo.

Ecco come mi piace gestire questi casi:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

Per me, è molto più intuitivo e il completamento automatico funziona fuori dagli schemi. Non c'è bisogno di cercare la soluzione su Google ogni volta.

Come bel bonus, non devi preoccuparti di formattare il valore risultante, è già in formato ISO8601.

Questa è la libreria delle meringhe, ci sono altri esempi qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.