2011-04-20 12 views
16

Próbuję uzyskać numer miesiąca przed bieżącym miesiącem (teraz jest 04 (kwiecień), więc próbuję uzyskać 03). Próbuję to:Próba uzyskania numeru miesiąca przed bieżącym miesiącem

date('m')-1; 

ale mam 3. Ale chcę uzyskać 03.

+2

* (wskazówka) * ' date' formatuje datę na łańcuch. Podczas używania arytmetyki w ciągu znaków łańcuch jest konwertowany na liczbę całkowitą. powinieneś być teraz w stanie znaleźć resztę. – Gordon

+0

nie można używać w ten sposób. myślę o "styczniu" na przykład ... '1-1 to 0' nie grudzień (' 12') –

Odpowiedz

31

Poprawny sposób to zrobić naprawdę jest:

date('m', strtotime('-1 month'));

Jak sobie życzysz zobacz dziwne rzeczy dzieją się w styczniu z innymi odpowiedziami.

+0

Wszystko będzie dobrze w styczniu? –

+0

Problem polega na tym, że na przykład w miesiącu "marzec" przyniesie on "03", a nie "3" –

+1

Zmień ** m ** na ** n **, jeśli potrzebujesz miesiąca bez zera. 'date ('n', strtotime ('- 1 month'));' - [Source] (http://ca.php.net/manual/en/function.date.php) –

0

Wynikiem obliczeń jest liczba. Jeśli chcesz sformatować go jak struna, można użyć:

$result = date('m')-1; 
$string_result = sprintf("%02s", $result); 

Edit: Należy pamiętać, że jest to tylko częściowe rozwiązanie sformatować liczbę jak struna.

+0

Czy jesteś pewien, że to dobre rozwiązanie? –

+1

-1 Nie jestem pewien, czy to dobre rozwiązanie. data ("m") zwraca 04, a następnie bierzesz 04-1 = 3. Ale co stanie się z Janem 01-1 = 0 ??? Lepiej jest stworzyć zmodyfikowaną datę za pomocą polecenia strtotime, a następnie składać ją z datą. – Johan

+0

@Col. Shrapnel, @Johan Masz rację, to tylko rozwiązanie do sformatowania liczby jak ciąg. Odpowiednio zredagowałem odpowiedź. – jeroen

-2

Należy to zrobić dla Ciebie ...

str_pad(date('m')-1, 2, '0', STR_PAD_LEFT); 
1

Możesz być zaskoczony, ale date() function manual page ma dokładny przykład co trzeba:

$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y")); 
+0

Gdzie jest dokładny przykład? Nie mogę tego łatwo zobaczyć. Link przechodzi na górę strony podręcznika. – Treffynnon

+0

@Treffynnon Istnieje przykład pobrania znacznika czasu z ostatniego miesiąca. jednak formatowanie pozostawia się na odrabianiu zadań domowych, tak –

+2

Myślę, że jest to linia, którą masz na myśli '$ lastmonth = mktime (0, 0, 0, date (" m ") - 1, data (" d "), data (" Y "));'. @Glebushka metoda jest łatwiejsza do odczytania w mojej opinii. – Treffynnon

-1

To też działa.

printf("%02s", (date('m') - 1)); 
+0

czytając inne odpowiedzi przed rozpoczęciem własnych prac jeszcze lepiej –

2

Aktualnie przyjęta odpowiedź spowoduje błędną odpowiedzią gdy dzień miesiąca (na bieżący dzień) jest większa liczba niż w ostatnim dniu miesiąca, za miesiąc poprzedni.

np. Rezultatem wykonania date('m', strtotime('-1 month')); w dniu 29 marca (w roku innym niż przestępny) będzie 03, ponieważ 29 jest większe niż dowolny dzień miesiąca w lutym, a zatem strtotime('-1 month') powróci w rzeczywistości 1 marca.

Zamiast użyć następujących:

date('n') - 1; 
+0

tak poprawnie, ale to zwróci 0 w styczniu ... data ("n", strtotime ("pierwszy dzień poprzedniego miesiąca")); to dobry sposób na zrobienie tego. –

0
intval(date('m')) 

dla bieżącego miesiąca

(intval(date('m'))-1)%12 

za miesiąc poprzedni, również za grudzień/styczeń

Powiązane problemy