Как я могу получить последний день месяца в PHP?
Данный:
$a_date = "2009-11-23"
Хочу 2009-11-30; и дано
$a_date = "2009-12-23"
Я хочу 2009-12-31.
t
возвращает количество дней в месяце данной даты (см. документациюdate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
вами можно сделать что-то вроде этого:(new DateTime('2009-11-23'))->modify('last day of')
Код, использующий strtotime (), потерпит неудачу после 2038 года (как указано в первом ответе в этой теме). Например, попробуйте использовать следующее:
Это даст ответ как: 1970-01-31
Поэтому вместо strtotime следует использовать функцию DateTime. Следующий код будет работать без проблем 2038 года:
источник
strtotime
код дает мне такой результат: 2040-11-30Я знаю, что это немного поздно, но я думаю, что есть более элегантный способ сделать это с
PHP 5.3+
помощью класса DateTime :источник
$date = new DateTime('last day of 2020-2');
$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
Есть также встроенная функция PHP cal_days_in_month () ?
источник
Это должно работать:
источник
Что не так - самым элегантным для меня является использование
DateTime
Интересно не вижу
DateTime::createFromFormat
, однострочникисточник
Вы можете создать дату первого числа следующего месяца, а затем использовать
strtotime("-1 day", $firstOfNextMonth)
источник
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
иmktime()
не рекомендуется, потому что. из известных ошибок, таких как определение даты на границе месяцев и високосных годов. ПосколькуDateTime
он доступен, вы должны использовать этот класс, чтобы избежать каких-либо проблем в будущем. Как много раз было сказано до меня, обе эти функцииstrtotime()
иmktime()
потерпят неудачу после 2038 года. Вот почему я понизил голосование ...Попробуйте это, если вы используете PHP 5.3+,
Чтобы найти в следующем месяце последнюю дату, измените ее следующим образом:
и так далее..
источник
Ваше решение здесь ..
источник
31
дляSeptember
чего, как вы знаете, это не правильно.Вы можете найти последний день месяца несколькими способами. Но просто вы можете сделать это, используя PHP strtotime () и функцию date (). Я думаю, ваш окончательный код будет выглядеть примерно так:
Live Demo
Но если вы используете PHP> = 5.2, я настоятельно рекомендую вам использовать новый объект DateTime. Например, как показано ниже:
Live Demo
Кроме того, вы можете решить эту проблему, используя свою собственную функцию, как показано ниже:
источник
Если вы используете расширение Carbon API для PHP DateTime, вы можете получить последний день месяца с помощью:
источник
$date->day = 0;
Вы также можете использовать его с datetime
источник
источник
Используя Zend_Date это довольно просто:
источник
источник
Вот полная функция:
Это вывело бы следующее:
Выход: 28
источник
Есть способы получить последний день месяца.
источник
Другой способ с использованием mktime, а не даты ('t'):
Таким образом, он рассчитывает либо 31,30, либо 29
источник
Я опоздал, но есть несколько простых способов сделать это, как упоминалось:
Использование mktime () - это мой путь для полного контроля над всеми аспектами времени ... IE
Если установить день равным 0 и переместить месяц вверх на 1, у вас будет последний день предыдущего месяца. 0 и отрицательные числа имеют одинаковое влияние в различных аргументах. PHP: mktime - руководство
Как уже говорили некоторые, strtotime - не самый надежный путь, и мало, если не все так легко универсальны.
источник
Я использую strtotime с cal_days_in_month следующим образом:
источник
Я обернул его в свой класс помощника по дате здесь https://github.com/normandqq/Date-Time-Helper, используя
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
И это сделано
источник
Расширение Carbon API для PHP DateTime
или
вернусь
источник
http://zkinformer.com/?p=134
источник
Это гораздо более элегантный способ получить конец месяца:
источник
Вы можете использовать "
t
" в функции даты, чтобы получить номер дня в определенном месяце.Код будет примерно таким:
Код самоочевиден. Надеюсь, это поможет.
источник