2010-11-12 14 views
22

Muszę zadeklarować dwie daty w formacie "Ymd": $toDate i $fromDate.Jak odjąć 4 miesiące od dzisiejszej daty?

$toDate reprezentuje dzisiejszą datę, a $fromDate musi być 4 miesiące wcześniej niż dzisiaj.

$toDate = Date('Ymd'); 
$fromDate = ? 

Jak utworzyć $fromDate?

Odpowiedz

57

Zastosowanie magia strtotime:

$fromDate = date("Ymd", strtotime("-4 months")); 
+0

dzisiaj na 31 grudnia próbowałem ten sam kod i próbował odjąć 1 miesiąc, jak wspomniano powyżej, zwróciło mi datę 1 grudnia 2012. jednak spodziewałem się 30 listopada. czy oczekuje się wyniku lub jego błędu? –

+0

@Mubashar Przypuszczam, że jest to zgodne z projektem! Oba podejścia (twoje i strtotime) są prawdopodobnie równie ważne. –

+0

Tak, to prawda –

8

patrz poniższy kod ...

$fourmonthsback = date("Ymd", mktime(0, 0, 0, date("m")-4, date("d"), date("Y"))); 

LUB

$fourmonthsback = mktime(0, 0, 0, date("m")-4, date("d"), date("Y")); 
+2

To nie zadziała w styczniu, lutym, marcu lub kwietniu, ponieważ miesiąc będzie wynosił 0 lub ujemny. – cypher

+8

@cypher - Właściwie mktime ma arytmetyczną datę. Jeśli ustawisz parametr miesiąca na mniej niż 1 mktime, wybierzesz wcześniejszy miesiąc. Jeśli ustawisz miesiąc na 0, mktime zmieni całą datę na grudzień poprzedniego roku. Ta arytmetyka działa na wszystkich parametrach mktime, z wyjątkiem strefy czasowej. – emurano

+0

Naprawdę? Przepraszam za to, nie wiedziałem tego. – cypher