Dodawanie dni do $ Data w PHP

216

Mam datę zwróconą w ramach zapytania mySQL w formularzu 2010-09-17

Chciałbym ustawić zmienne $ Date2 na $ Date5 w następujący sposób:

$Date2 = $Date + 1

$Date3 = $Date + 2

itp..

tak, że wraca 2010-09-18, 2010-09-19etc ...

próbowałem

date('Y-m-d', strtotime($Date. ' + 1 day'))

ale to daje mi datę PRZED $Date.

Jaki jest prawidłowy sposób, aby uzyskać moje daty w formacie „Ymd”, aby można je było wykorzystać w innym zapytaniu?

Istari
źródło

Odpowiedzi:

447

Wszystko, co musisz zrobić, to użyć dayszamiast daytego:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

I wyprowadza poprawnie:

2010-09-18
2010-09-19
shamittomar
źródło
7
Wyprowadza poprawnie używając równie daydobrze ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis,
Po prostu spróbowałem w ten sposób i zadziałało. Nadal nie mam pojęcia, dlaczego dostałem wartość na jeden dzień przed datą początkową, kiedy ją wypróbowałem.
Istari
Co jeśli miałbym zmienną na liczbę dni do dodania?
Carlos Martins
3
@Carlos echo date („Ymd”, strtotime ($ Date. '+'. $ Zmienna. 'Days'));
Pradeep Kumar Prabaharan
Nie, ta metoda w ogóle nie działa.
Wraca
81

Jeśli używasz PHP 5.3, możesz użyć DateTimeobiektu i jego addmetody:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Spójrz na stronę podręcznika DateIntervalkonstruktora, aby dowiedzieć się, jak skonstruować inne okresy, aby dodać je do swojej daty (2 dni 'P2D', 3 dni 'P3D'itd.).

Bez PHP 5.3 powinieneś być w stanie korzystać strtotimeze sposobu, w jaki to zrobiłeś (przetestowałem go i działa zarówno w wersji 5.1.6, jak i 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"
Daniel Vandersluis
źródło
Przykro mi, Daniel, ale na serwerze działa php 5.2.6, więc to nie zadziała
Istari
2
DateTime::constructużywa tego samego mechanizmu co strtotimedo parsowania daty, więc możesz również zrobić, new DateTime("+1 day $date")co nie wymagałoby 5.3
Gordon
Nie chciałem głosować za tym, ale jakoś to zrobiłem = /
Steven
To jest rzeczywista odpowiedź dla php 5.5+
TheLegendaryCopyCoder,
29

Od PHP 5.2 możesz używać modyfikować z obiektem DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Zachowaj ostrożność, dodając miesiące ... (i w mniejszym stopniu lata)

Omn
źródło
zaakceptowana odpowiedź daje odpowiedź na ponad 15 000 dni, a odpowiedź ta daje odpowiedź również po dodaniu 25 000 dni więcej
Pradeep Kumar Prabaharan
Możesz również wysłać zapytanie do DateTimeImmutable () i otrzymasz zmodyfikowaną kopię bez ryzyka zmiany oryginału.
Xavi Montero,
17

Oto mały fragment przedstawiający zmiany daty:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";
Madhu V Rao
źródło
czy możesz zobaczyć moje powiązane (quesiton) [ stackoverflow.com/q/61421783/8919244] ?
Faisal,
8

Możesz także użyć następującego formatu

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Możesz układać zmiany w stos w ten sposób:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Zwróć uwagę na różnicę między tym podejściem a tym w innych odpowiedziach: zamiast łączyć wartości +1 dayi <timestamp>możesz po prostu przekazać znacznik czasu jako drugi parametr parametru strtotime.

Sztuczki
źródło
5

Używanie zmiennej dla liczby dni

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 
Carlos Martins
źródło
5

Oto najprostsze rozwiązanie twojego zapytania

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result
Engr Atiq
źródło
2

Oto prosty sposób na rozwiązanie tego problemu.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

Dane wyjściowe będą:

2015-11-22

Rozwiązanie znalazło się stąd - Jak dodać dni do daty w PHP

JoyGuru
źródło
0

Wszyscy muszą użyć poniższego kodu:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";
Vikasgore
źródło
1
Nie powinieneś tego robić w ten sposób, w końcu będziesz mieć problemy z sekundami przestępnymi
Nathan