2009-08-17 17 views
51

In certe situazioni che voglio aggiungere 1 giorno per il valore della mia DATETIME variabile formattato:l'aggiunta di 1 giorno a un valore formato 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?

risposta

34

Se si vuole fare questo 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 si desidera 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); 
+0

non mi dà l'ora corrente? ho ancora bisogno di tenere il mio utente immesso tempo. – ian

+0

Sì, ma ho segnato quali valori dovresti cambiare al tempo personalizzato. Puoi semplicemente sostituire 'time()' con 'strtotime (" {$ _ GET ['start_hours']}: {$ _ OTTIENI ['start_minutes']} {$ _GET ['start_ampm']} ")'. – RaYell

+0

questo non è un salvataggio estivo/invernale! Si prega di utilizzare DST salvare la manipolazione data/ora – steven

8
  1. Usa strtotime per convertire la stringa in un timestamp
  2. Aggiungere un giorno ad esso (ad esempio: aggiungendo 86400 secondi (24 * 60 * 60))

esempio:

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

se è solo l'aggiunta di 1 giorno, quindi utilizzare nuovamente strtotime è probabilmente eccessivo.

+0

Quindi ho bisogno di convertirlo in un TIMESTAMP quindi tornare a un formato DATETIME? – ian

+4

Suppongo che si debba anche notare che non tutti i giorni sono lunghi 24 ore. Nella maggior parte dei posti del mondo, l'ora legale (ora legale) significa che un giorno all'anno è solo di 23 ore e un altro giorno di 25 ore. – nickf

1

Suggerisco di iniziare a utilizzare le classi Zend_Date da Zend Framework. Lo so, è un po 'offtopic, ma mi piace questo modo :-)

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

C'è più di un modo per fare questo con DateTime che è stato introdotto in PHP 5.2. A differenza dell'utilizzo di strtotime(), ciò rappresenterà l'ora legale e l'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'); 
+0

Ah, un * loop da loop *. –

+5

Se si aggiunge più di un giorno, è possibile utilizzare al plurale o singolare e ottenere lo stesso risultato ad esempio: '+2 giorno' o' +2 giorni' (ovviamente '+2 giorni' è semanticamente corretto) – timhc22

+0

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

9

Il DateTime costruttore accetta un parametro string time. $time possono essere cose diverse, deve rispettare lo datetime format.

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 è possibile utilizzare il seguente.

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

Risposta senza spiegazione? Leggi [Come scrivere una buona risposta?] (Http://stackoverflow.com/help/how-to-answer) – Shashanth

Problemi correlati