2009-08-17 12 views
51

W pewnych sytuacjach, chcę dodać 1 dnia do wartości mojego DATETIME zmiennej sformatowanej:dodanie 1 dzień do wartości formatu DATETIME

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

Jaki jest najlepszy sposób to zrobić?

Odpowiedz

34

Jeśli chcesz to zrobić w 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)); 

Jeśli chcesz dodać datę w MySQL:

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

czy to nie da mi aktualnego czasu? Nadal muszę utrzymywać mój wpisany przez użytkownika czas. – ian

+0

Tak, ale zaznaczyłem, jakie wartości należy zmienić na czas niestandardowy. Możesz po prostu zamienić 'time()' na 'strtotime (" {$ _ GET ['start_hours']}: {$ _ GET ['start_minutes']} {$ _GET ['start_ampm']} ")'. – RaYell

+0

to nie jest lato/zima! Proszę użyć DST zapisać datę/czas manipulacji – steven

8
  1. Zastosowanie strtotime przekonwertować ciąg do stemplem czasowym
  2. Dodaj dzień (dodając 86400 sekund (24 * 60 * 60))

np

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

Jeśli jest dodanie tylko 1 dzień, a następnie ponownie używając strtotime to chyba przesada.

+0

Więc muszę przekonwertować go na TIMESTAMP, a następnie z powrotem do formatu DATETIME? – ian

+4

Myślę, że należy również zauważyć, że nie każdy dzień trwa 24 godziny. W większości miejsc na świecie oszczędność czasu letniego oznacza, że ​​jeden dzień w roku to tylko 23 godziny, a jeszcze jeden dzień to 25 godzin. – nickf

1

Proponuję rozpocząć korzystanie z klas Zend_Date od Zend Framework. Wiem, jego nieco offtopic, ale ja lubię ten sposób :-)

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

istnieje więcej niż jeden sposób to zrobić z DateTime który został wprowadzony w PHP 5.2. W przeciwieństwie do korzystania z strtotime() będzie to uwzględniać czas letni i rok przestępny.

$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, a * pętla da loop *. –

+5

Jeśli dodajesz więcej niż jeden dzień, możesz użyć liczby mnogiej lub liczby pojedynczej i uzyskać ten sam wynik, np .: '+2 day' lub' +2 days' (oczywiście '+2 dni' jest bardziej poprawne semantycznie) – timhc22

+0

Jakie są praktyczne różnice między tymi metodami? Pierwszy przykład wydaje mi się najprostszy i najbardziej semantyczny. – BadHorsie

9

Konstruktor DateTime przyjmuje parametr string time. $time może być różny, musi być zgodny z datetime format.

Istnieje kilka ważnych wartości jako przykłady:

  • 'now' (wartość domyślna)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

Więc w twoim przypadku można użyć następujące.

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

Odpowiadając bez wyjaśnienia? Przeczytaj [Jak napisać dobrą odpowiedź?] (Http://stackoverflow.com/help/how-to-answer) – Shashanth

Powiązane problemy