Jak mogę uzyskać ostatni dzień miesiąca w PHP?
Dany:
$a_date = "2009-11-23"
Chcę 30.11.2009; i dane
$a_date = "2009-12-23"
Chcę 31.12.2009.
t
zwraca liczbę dni w miesiącu określonej daty (patrz dokumentacja dladate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
niemu możesz zrobić coś takiego:(new DateTime('2009-11-23'))->modify('last day of')
Kod korzystający z funkcji strtotime () zawiedzie po roku 2038. (jak podano w pierwszej odpowiedzi w tym wątku) Na przykład spróbuj użyć następujących czynności:
Odpowiedź da: 1970-01-31
Dlatego zamiast strtotime należy użyć funkcji DateTime. Poniższy kod będzie działał bez problemu w roku 2038:
źródło
strtotime
kod daje mi ten wynik: 2040-11-30Wiem, że jest to trochę za późno, ale myślę, że jest bardziej elegancki sposób, aby to zrobić
PHP 5.3+
za pomocą klasy DateTime :źródło
$date = new DateTime('last day of 2020-2');
$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
Jest też wbudowana funkcja PHP cal_days_in_month () ?
źródło
To powinno działać:
źródło
Co jest nie tak - najbardziej eleganckie jest dla mnie używanie
DateTime
Zastanawiam się, nie widzę
DateTime::createFromFormat
, jedno-liniowyźródło
Możesz utworzyć datę pierwszego następnego miesiąca, a następnie użyć
strtotime("-1 day", $firstOfNextMonth)
źródło
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
imktime()
jest odradzane, ponieważ. znanych błędów, takich jak ustalanie daty na skraju miesięcy i liczenie lat przestępnych. PonieważDateTime
jest dostępny, należy użyć tej klasy, aby uniknąć problemów w przyszłości. Jak już wielokrotnie mówiłem, oba te funkcje działająstrtotime()
imktime()
nie będą działać po 2038 r. Dlatego głosowałem za tym ...Spróbuj tego, jeśli używasz PHP 5.3+,
Aby znaleźć datę ostatniego miesiąca następnego miesiąca, zmodyfikuj w następujący sposób,
i tak dalej..
źródło
Twoje rozwiązanie jest tutaj ..
źródło
31
doSeptember
których, jak wiesz, że nie jest to poprawne.Ostatni dzień miesiąca można znaleźć na kilka sposobów. Ale po prostu możesz to zrobić za pomocą funkcji PHP strtotime () i date (). Wyobrażam sobie, że twój końcowy kod wyglądałby mniej więcej tak:
Demo na żywo
Ale jeśli używasz PHP> = 5.2 Zdecydowanie sugeruję użycie nowego obiektu DateTime. Na przykład jak poniżej:
Demo na żywo
Możesz rozwiązać ten problem, korzystając z własnej funkcji, takiej jak poniżej:
źródło
Jeśli używasz rozszerzenia Carbon API dla PHP DateTime, możesz uzyskać ostatni dzień miesiąca dzięki:
źródło
$date->day = 0;
Możesz także używać go z datetime
źródło
źródło
Korzystanie z Zend_Date jest dość proste:
źródło
źródło
Oto pełna funkcja:
Wynikiem tego będzie:
Wyjście: 28
źródło
Są sposoby na zdobycie ostatniego dnia miesiąca.
źródło
Jestem spóźniony, ale jest kilka łatwych sposobów, jak to wspomniano:
Używanie mktime () to moja droga do pełnej kontroli nad wszystkimi aspektami czasu ... IE
Ustawienie dnia na 0 i przesunięcie miesiąca o 1 daje ostatni dzień poprzedniego miesiąca. 0 i liczby ujemne mają podobny wpływ w różnych argumentach. PHP: mktime - Podręcznik
Jak niektórzy powiedzieli, strtotime nie jest najsolidniejszą drogą, a mało, jeśli żadna nie jest tak łatwa w użyciu.
źródło
Używam strtotime z cal_days_in_month w następujący sposób:
źródło
Zawinąłem go w mojej klasie pomocników daty i czasu https://github.com/normandqq/Date-Time-Helper przy użyciu
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
I gotowe
źródło
Innym sposobem jest użycie mktime i not date („t”):
W ten sposób oblicza, czy jest to 31,30 lub 29
źródło
Rozszerzenie Carbon API dla PHP DateTime
lub
wróci
źródło
http://zkinformer.com/?p=134
źródło
Jest to o wiele bardziej elegancki sposób na koniec miesiąca:
źródło
Możesz użyć funkcji „
t
” w funkcji daty, aby uzyskać liczbę dni w danym miesiącu.Kod będzie mniej więcej taki:
Kod jest objaśniany samodzielnie. Mam nadzieję, że to pomoże.
źródło