2013-03-05 17 views
6

mam ten string obiekt w moim tablicy phpphp ciąg w formacie daty, dodać 12 godzin

"05/03/2013 00: 00: 00 + 00"

Chciałbym dodać 12 godzin do wpisu w PHP, a następnie zapisz go z powrotem do ciągu w tym samym formacie

Wierzę, że wymaga to konwersji ciągu na obiekt daty. Ale nie jestem pewien, jak inteligentny obiekt data jest i jeśli muszę powiedzieć, że parametry formatowania czy to ma po prostu wziąć String

$date = new DateTime("2013-03-05 00:00:00+00"); 
$date->add("+12 hours"); 
//then convert back to string or just assign it to a variable within the array node 

byłem Wracając pustych wartości z tej metody lub podobny jeden próbowałem

Jak rozwiązać ten problem?

Dzięki, twoja intuicja jest doceniana

Odpowiedz

20

Zmienić add() do modify(). add() oczekuje obiektu DateInterval.

<?php 
$date = new DateTime("2013-03-05 00:00:00+00"); 
$date->modify("+12 hours"); 
echo $date->format("Y-m-d H:i:sO"); 

See it in action

Oto przykład przy użyciu DateInterval obiektu:

<?php 
$date = new DateTime("2013-03-05 00:00:00+00"); 
$date->add(new DateInterval('PT12H')); 
echo $date->format("Y-m-d H:i:sO"); 

See it in action

+0

A jeśli potrzebujesz przesunięcia, jest to format '$ date-> (" Y-m-d H: i: sO ");' – acme

+1

Przyjemny połów. Dodany. –

2

Zmiana ta linia

$date->add("+12 hours"); 

z

$date->add(new DateInterval("PT12H")); 

to doda 12 godzin do datą

spojrzeć na stronie DateInterval constructor umieć zbudować ciąg DateInterval

+0

okej, widziałem tę składnię na stronie referencyjnej dateAdd http://www.php.net/manual/en/datetime.add.php, ale nie mogłem znaleźć odnośnika informującego mnie o tym, czym był P12H i innych rodzajach interwałów, jeśli tam był, nie był zbyt intuicyjny. Pomyśl o tym, może jest na stronie dateinterval – CQM

+0

Zaktualizowana odpowiedź @nlsbshtr (nie trafiłem w T) –

1

wykorzystać w celu dodania godzin

$date1= "2014-07-03 11:00:00"; 
$new_date= date("Y-m-d H:i:s", strtotime($date1 . " +3 hours")); 
echo $new_date; 
0

Jeśli masz interwał dynamiczny, w ten sposób unikniesz błędów o złym formacie dla $ dateDiff:

$dateDiff = "12 hours"; 
$interval = DateInterval::createFromDateString($dateDiff); 
$date = new DateTime("2013-03-05 00:00:00+00"); 
$date->add($interval); 
echo $date->format("Y-m-d H:i:sO"); 
Powiązane problemy