如何从datefind月份的最后一天?

我怎样才能得到PHP的月份的最后一天?

鉴于:

$a_date = "2009-11-23" 

我想要2009-11-30; 并给予

 $a_date = "2009-12-23" 

我想要2009-12-31。

t返回给定date的月份中的天数(请参阅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' ); 

我知道这是有点晚,但我认为有一个更优雅的方式使用DateTime类的PHP 5.3+这样做:

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

还有内置的PHP函数cal_days_in_month()

“此function将返回指定日历的年份中的天数”。 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/>'; 

您可以为下个月的第一个创build一个date,然后使用strtotime("-1 day", $firstOfNextMonth)

你的解决scheme在这里..

 $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'); 

为了find下个月的最后date,修改如下,

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

等等..

如果您为PHP DateTime使用Carbon API扩展,则可以通过以下方式获取月份的最后一天:

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

你可以通过几种方法find月份的最后一天。 但是,你可以使用PHP的strtotime()和date()函数来做到这一点。我想你的最终代码看起来像这样:

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

现场演示

但是如果你使用PHP> = 5.2,我强烈build议你使用新的DateTime对象。 比如像下面这样:

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

现场演示

此外,你可以使用你自己的function解决这个问题,如下所示:

 /** * 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

我不知道我没有看到DateTime::createFromFormat ,一个class轮

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

你也可以用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'); 

这是一个完整的function:

 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)); 

用于PHP DateTime的Carbon API扩展

 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 – 手册

正如一些人所说,时光不是最坚实的方法去,如果没有一样容易多才多艺。

 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();来包装它在我的date时间帮助器类中https://github.com/normandqq/Date-Time-Helper $dateLastDay = Model_DTHpr::getLastDayOfTheMonth();

它完成了

另一种使用mktime而不是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)))); 

您可以在date函数中使用“ 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"; 

代码是自我解释的。 所以希望它有帮助。