W niektórych sytuacjach chcę dodać 1 dzień do wartości mojej zmiennej w formacie 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, aby to zrobić?
time()
zstrtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.Jest więcej niż jeden sposób, aby to zrobić za pomocą DateTime, który został wprowadzony w PHP 5.2. W przeciwieństwie do korzystania z
strtotime()
tego, uwzględni się 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');
źródło
+2 day
lub+2 days
(oczywiście+2 days
jest bardziej poprawne semantycznie)Konstruktor DateTime przyjmuje parametr
string time
.$time
mogą być różne rzeczy, musi przestrzegać formatu daty i godziny .Oto kilka prawidłowych wartości jako przykłady:
'now'
(wartość domyślna)2017-10-19
2017-10-19 11:59:59
2017-10-19 +1day
Tak więc w twoim przypadku możesz użyć następującego.
$dt = new \DateTime('now +1 day'); //Tomorrow $dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
źródło
strtotime
do konwersji ciągu na znacznik czasuna przykład:
$time = strtotime($myInput); $newTime = $time + 86400;
Jeśli jest to tylko dodanie 1 dnia, ponowne użycie strtotime jest prawdopodobnie przesadą.
źródło
date()
lokalną strefą czasową brana jest pod uwagę, która zajmie się czasem letnim.Możesz użyć
$now = new DateTime(); $date = $now->modify('+1 day')->format('Y-m-d H:i:s');
źródło
Proponuję zacząć używać klas Zend_Date z Zend Framework . Wiem, trochę offtopic, ale podoba mi się ten sposób :-)
$date = new Zend_Date(); $date->add('24:00:00', Zend_Date::TIMES); print $date->get();
źródło
Możesz użyć w następujący sposób.
$start_date = date('Y-m-d H:i:s'); $end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
Możesz również ustawić dni jako stałe i używać jak poniżej.
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days'); $end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
źródło
Korzystanie z czasu żądania serwera, aby dodać dni. Działa zgodnie z oczekiwaniami.
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));
Tutaj „+2 dni”, aby dodać dowolną liczbę dni.
źródło
Istnieje bardziej zwięzły i intuicyjny sposób dodawania dni do daty php. Nie zrozum mnie źle, te wyrażenia php są świetne, ale zawsze musisz wygooglować, jak je traktować. Brakuje mi za to funkcji automatycznego uzupełniania.
Oto, jak lubię radzić sobie z takimi przypadkami:
(new Future( new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'), new OneDay() )) ->value();
Dla mnie jest to o wiele bardziej intuicyjne, a autouzupełnianie działa od razu po wyjęciu z pudełka. Nie musisz za każdym razem wyszukiwać w Google rozwiązania.
Jako miły bonus, nie musisz się martwić formatowaniem wynikowej wartości, jest to już format ISO8601.
Jest to biblioteka beza, istnieje więcej przykładów tutaj .
źródło