Intereting Posts
от переменной mysql до javascript PHP Создайте несколько CSV-файлов в памяти, затем сжимайте Получить последний идентификатор вставки с доктриной 2? Установка функции равна переменной? wkhtmltopdf с задержкой javascript не работает php.ini & SMTP = – как вы передаете имя пользователя и пароль Странное поведение в PHP и Apache2: разные выходные данные на разных серверах Загрузите данные двоичного потока из браузера с помощью PHP с веб-службой «загруженный файл поврежден» Mysql codeigniter php asc desc order по результату подсчета с использованием php Разрешен ли конкретный тип файла? Загрузка php запуск php-скрипта (php-функция) в linux bash Как изменить сингулярное / множественное число на «комментарий» на «комментарии» к числу комментариев Facebook? Каковы наилучшие функции деструкции ввода PHP? Нужен скрипт php для загрузки файла на удаленном сервере и сохранения локально Обновление Composer Laravel

Как найти последний день месяца с даты?

Как я могу получить последний день месяца в 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("Ymt", strtotime($a_date)); 

Код с использованием strtotime () завершится с ошибкой после 2038 года (как указано в первом ответе в этом потоке) Например, попробуйте использовать следующее:

 $a_date = "2040-11-23"; echo date("Ymt", strtotime($a_date)); 

Он даст ответ как: 1970-01-31

Поэтому вместо strtotime следует использовать функцию DateTime. Следующий код будет работать без проблемы года 2038:

 $d = new DateTime( '2040-11-23' ); echo $d->format( 'Ymt' ); 

Я знаю, что это немного поздно, но я думаю, что есть более элегантный способ сделать это с PHP 5.3+ , используя класс DateTime :

 $date = new DateTime('now'); $date->modify('last day of this month'); echo $date->format('Ym-d'); 

Существует также встроенная функция PHP cal_days_in_month () ?

«Эта функция вернет количество дней в месяце года для указанного календаря». http://php.net/manual/en/function.cal-days-in-month .

 echo cal_days_in_month(CAL_GREGORIAN, 11, 2009); // = 30 

Это должно работать:

 $week_start = strtotime('last Sunday', time()); $week_end = strtotime('next Sunday', time()); $month_start = strtotime('first day of this month', time()); $month_end = strtotime('last day of this month', time()); $year_start = strtotime('first day of January', time()); $year_end = strtotime('last day of December', time()); echo date('D, M jS Y', $week_start).'<br/>'; echo date('D, M jS Y', $week_end).'<br/>'; echo date('D, M jS Y', $month_start).'<br/>'; echo date('D, M jS Y', $month_end).'<br/>'; echo date('D, M jS Y', $year_start).'<br/>'; echo date('D, M jS Y', $year_end).'<br/>'; 

Вы можете создать дату для первого из следующего месяца, а затем использовать strtotime("-1 day", $firstOfNextMonth)

Ваше решение здесь ..

 $lastday = date('t',strtotime('today')); 

Попробуйте это, если вы используете PHP 5.3+,

 $a_date = "2009-11-23"; $date = new DateTime($a_date); $date->modify('last day of this month'); echo $date->format('Ym-d'); 

Чтобы найти следующий последний месяц, измените следующим образом:

  $date->modify('last day of 1 month'); echo $date->format('Ym-d'); 

и так далее..

Если вы используете расширение API Carbon для PHP DateTime, вы можете получить последний день месяца:

 $date = Carbon::now(); $date->addMonth(); $date->day = 0; echo $date->toDateString(); // use toDateTimeString() to get date and time - $date = Carbon::now(); $date->addMonth(); $date->day = 0; echo $date->toDateString(); // use toDateTimeString() to get date and time 

Что случилось с вами, ребята? Наиболее элегантным является использование DateTime

Интересно, я не вижу DateTime::createFromFormat , один лайнер

 $lastDay = \DateTime::createFromFormat("Ymd", "2009-11-23")->format("Ymt"); 

Вы можете найти последний день месяца несколькими способами. Но просто вы можете сделать это с помощью функции PHP strtotime () и date (). Я предполагаю, что ваш последний код будет выглядеть примерно так:

 $a_date = "2009-11-23"; echo date('Ym-t',strtotime($a_date)); 

Демо-версия

Но если вы используете PHP> = 5.2, я настоятельно рекомендую вам использовать новый объект DateTime. Например, как показано ниже:

 $a_date = "2009-11-23"; $date = new DateTime($a_date); $date->modify('last day of this month'); echo $date->format('Ym-d'); 

Демо-версия

Кроме того, вы можете решить это, используя свою собственную функцию, как показано ниже:

 /** * Last date of a month of a year * * @param[in] $date - Integer. Default = Current Month * * @return Last date of the month and year in yyyy-mm-dd format */ function last_day_of_the_month($date = '') { $month = date('m', strtotime($date)); $year = date('Y', strtotime($date)); $result = strtotime("{$year}-{$month}-01"); $result = strtotime('-1 second', strtotime('+1 month', $result)); return date('Ym-d', $result); } $a_date = "2009-11-23"; echo last_day_of_the_month($a_date); 

Вы также можете использовать его с datetime

 $date = new \DateTime(); $nbrDay = $date->format('t'); $lastDay = $date->format('Ym-t'); 
 $date1 = $year.'-'.$month; $d = date_create_from_format('Y-m',$date1); $last_day = date_format($d, 't'); 

Вот полная функция:

 public function get_number_of_days_in_month($month, $year) { // Using first day of the month, it doesn't really matter $date = $year."-".$month."-1"; return date("t", strtotime($date)); } 

Это будет выводиться следующим образом:

 echo get_number_of_days_in_month(2,2014); 

Выход: 28

Есть способы получить последний день месяца.

 //to get last day of current month echo date("t", strtotime('now')); //to get last day from specific date $date = "2014-07-24"; echo date("t", strtotime($date)); //to get last day from specific date by calendar $date = "2014-07-24"; $dateArr=explode('-',$date); echo cal_days_in_month(CAL_GREGORIAN, $dateArr[1], $dateArr[0]); 

Использование Zend_Date довольно просто:

 $date->setDay($date->get(Zend_Date::MONTH_DAYS)); 

Расширение API Carbon для PHP DateTime

 Carbon::parse("2009-11-23")->lastOfMonth()->day; 

или

 Carbon::createFromDate(2009, 11, 23)->lastOfMonth()->day; 

будет возвращаться

 30 

Я опаздываю, но есть несколько простых способов сделать это, как уже упоминалось:

 $days = date("t"); $days = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y')); $days = date("j",mktime (date("H"),date("i"),date("s"),(date("n")+1),0,date("Y"))); 

Использование mktime () – это мой полный контроль над всеми аспектами времени … IE

 echo "<br> ".date("Ynj",mktime (date("H"),date("i"),date("s"),(11+1),0,2009)); 

Установка дня на 0 и перемещение вашего месяца до 1 даст вам последний день предыдущего месяца. 0, а отрицательные числа имеют аналогичный аффект в разных аргументах. PHP: mktime – Руководство

Как некоторые из них сказали, что strtotime – это не самый надежный способ пойти, и мало, если никто не будет столь же легко универсальным.

 function first_last_day($string, $first_last, $format) { $result = strtotime($string); $year = date('Y',$result); $month = date('m',$result); $result = strtotime("{$year}-{$month}-01"); if ($first_last == 'last'){$result = strtotime('-1 second', strtotime('+1 month', $result)); } if ($format == 'unix'){return $result; } if ($format == 'standard'){return date('Ym-d', $result); } } 

http://zkinformer.com/?p=134

Я завернул его в моем классе времени для $dateLastDay = Model_DTHpr::getLastDayOfTheMonth(); https://github.com/normandqq/Date-Time-Helper, используя $dateLastDay = Model_DTHpr::getLastDayOfTheMonth();

И это сделано

Другой способ использования mktime и not date ('t'):

 $dateStart= date("Ymd", mktime(0, 0, 0, 10, 1, 2016)); //2016-10-01 $dateEnd = date("Ymd", mktime(0, 0, 0, 11, 0, 2016)); //This will return the last day of october, 2016-10-31 :) 

Таким образом, он рассчитывает либо, если он равен 31,30 или 29

Это гораздо более элегантный способ получить конец месяца:

  $thedate = Date('m/d/Y'); $lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate)))); 

Вы можете использовать функцию « t » в функции даты, чтобы получить количество дней в определенном месяце.

Код будет примерно таким:

 function lastDateOfMonth($Month, $Year=-1) { if ($Year < 0) $Year = 0+date("Y"); $aMonth = mktime(0, 0, 0, $Month, 1, $Year); $NumOfDay = 0+date("t", $aMonth); $LastDayOfMonth = mktime(0, 0, 0, $Month, $NumOfDay, $Year); return $LastDayOfMonth; } for($Month = 1; $Month <= 12; $Month++) echo date("Ynj", lastDateOfMonth($Month))."\n"; 

Код сам объясняется. Поэтому надеюсь, что это поможет.