2010-09-16 9 views
128

Mam data zwracane jako część MySQL Query w postaci 2010-09-17

Chciałbym ustawić zmienne $ date2 do $ Date5 następująco:

$Date2 = $Date + 1

$Date3 = $Date + 2

etc ..

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

Próbowałem

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

ale to daje mi datę, przed $Date.

Jaki jest poprawny sposób uzyskania moich dat w formacie "Y-m-d", aby mogły być użyte w innym zapytaniu?

+0

możliwe duplikat [php Obliczanie przyszłości daty dodając dni do daty zmiennej] (http://stackoverflow.com/questions/2692679/php-c alculating-future-date-by-adding-days-to-a-variable-date) – Gordon

Odpowiedz

272

wszystko co masz zrobić jest użycie days zamiast day tak:

<?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 
+4

wyprowadza poprawnie używając tylko 'day' również ...' date ("Ymd", strtotime ('2010-09-17 + 1 day')) '->' 2010-09-18', 'date (" Ymd " , strtotime ('2010-09-17 + 2 day')) '->' 2010-09-19' –

+0

Po prostu wypróbowałem to w ten sposób i zadziałało. Wciąż nie mam pojęcia, dlaczego dostałem wartość dzień przed datą rozpoczęcia, kiedy początkowo go wypróbowałem. – Istari

+0

Co się stanie, jeśli mam zmienną dla liczby dni do dodania? –

52

Jeśli używasz PHP 5.3, można użyć DateTime obiektu i jego add metody:

$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 DateInterval constructor ręcznego stronie, aby zobaczyć, jak skonstruować inne okresy, aby dodać do swojej daty (2 dni to 'P2D', 3 to 'P3D' itd.).

Bez PHP 5.3, powinny być w stanie używać strtotime sposób to zrobił (Przetestowałem go i działa zarówno w 5.1.6 i 5.2.10):

$Date1 = '2010-09-17'; 
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day")); 
// var_dump($Date2) returns "2010-09-18" 
+0

Niestety Daniel, ale serwer internetowy działa php 5.2.6, więc to nie zadziała – Istari

+1

'DateTime :: construct' używa tego samego mechanizmu jako 'strtotime' do parsowania daty, więc możesz także zrobić' new DateTime ("+ 1 day $ date") ', który nie wymagałby 5.3 – Gordon

+0

Nie chciałem tego zlekceważyć, ale jakoś tak zrobiłem =/ – Stevus

0

Wszystko trzeba użyć kodu poniżej:

$nday = time() + (24 * 60 * 60);  
echo 'Now:  '. date('Y-m-d') ."\n";  
echo 'Next Day: '. date('Y-m-d', $nday) ."\n"; 
+1

Nie powinieneś tego robić w ten sposób, w końcu będziesz miał problemy z sekundami przestępnymi – Nathan

7

Można również użyć następującej formie

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

można układać skorygować ten sposób:

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

zauważyć różnicę między tym podejściem i jedna z innych odpowiedzi: zamiast łączenia wartości +1 day i <timestamp>, można po prostu przekazać znacznik czasu jako drugą parameję licznik strtotime.

13

Oto mały fragment zademonstrować data modyfikacji:

$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"; 
1

Korzystanie zmienną do liczby dni

$myDate = "2014-01-16"; 
$nDays = 16; 
$newDate = strtotime($myDate . '+ '.$nDays.'days'); 
echo newDate('d/m/Y', $soma); //format new date 
11

z PHP 5.2 na można użyć modyfikować z obiektu 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 ... (iw mniejszym stopniu lata)

+0

zaakceptowana odpowiedź daje tylko odpowiedź na 15000+ dni, w których ta odpowiedź daje odpowiedź po dodaniu 25000+ dni .. –

1

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

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

wyjściowe będą:

2015-11-22 

Rozwiązanie znalazła stąd - How to Add Days to Date in PHP

1

Oto najprostsze rozwiązanie do 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