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
.
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
.
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.
Wszystko będzie dobrze w styczniu? –
Problem polega na tym, że na przykład w miesiącu "marzec" przyniesie on "03", a nie "3" –
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) –
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.
Czy jesteś pewien, że to dobre rozwiązanie? –
-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
@Col. Shrapnel, @Johan Masz rację, to tylko rozwiązanie do sformatowania liczby jak ciąg. Odpowiednio zredagowałem odpowiedź. – jeroen
Należy to zrobić dla Ciebie ...
str_pad(date('m')-1, 2, '0', STR_PAD_LEFT);
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"));
Gdzie jest dokładny przykład? Nie mogę tego łatwo zobaczyć. Link przechodzi na górę strony podręcznika. – Treffynnon
@Treffynnon Istnieje przykład pobrania znacznika czasu z ostatniego miesiąca. jednak formatowanie pozostawia się na odrabianiu zadań domowych, tak –
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
To też działa.
printf("%02s", (date('m') - 1));
czytając inne odpowiedzi przed rozpoczęciem własnych prac jeszcze lepiej –
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;
tak poprawnie, ale to zwróci 0 w styczniu ... data ("n", strtotime ("pierwszy dzień poprzedniego miesiąca")); to dobry sposób na zrobienie tego. –
intval(date('m'))
dla bieżącego miesiąca
(intval(date('m'))-1)%12
za miesiąc poprzedni, również za grudzień/styczeń
* (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
nie można używać w ten sposób. myślę o "styczniu" na przykład ... '1-1 to 0' nie grudzień (' 12') –