How to find the last day of the month from date?
如何在PHP中获取本月的最后一天?
鉴于:
1 | $a_date ="2009-11-23" |
我想要2009-11-30; 给定
1 | $a_date ="2009-12-23" |
我想2009-12-31。
使用strtotime()的代码将在2038年后失败。(在此主题的第一个答案中给出)
例如,尝试使用以下内容:
它将给出答案:1970-01-31
因此,应该使用DateTime函数而不是strtotime。
以下代码将在没有2038年问题的情况下运行:
1 2 | $d = new DateTime( '2040-11-23' ); echo $d->format( 'Y-m-t' ); |
我知道这有点晚了,但我认为使用DateTime类有一个更优雅的方法用
1 2 3 | $date = new DateTime('now'); $date->modify('last day of this month'); echo $date->format('Y-m-d'); |
还有内置的PHP函数cal_days_in_month()?
"This function will return the number of days in the month of year for the specified calendar."
http://php.net/manual/en/function.cal-days-in-month.
1 2 |
这应该工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $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/>'; |
您可以为下个月的第一天创建日期,然后使用
试试这个,如果您使用的是PHP 5.3+,
1 2 3 4 | $a_date ="2009-11-23"; $date = new DateTime($a_date); $date->modify('last day of this month'); echo $date->format('Y-m-d'); |
要查找下个月的最后日期,请修改如下,
1 2 | $date->modify('last day of 1 month'); echo $date->format('Y-m-d'); |
等等..
怎么了 -
对我来说最优雅的是使用
我不知道我没有看到
1 | $lastDay = \DateTime::createFromFormat("Y-m-d","2009-11-23")->format("Y-m-t"); |
你的解决方案在这里..
如果您对PHP DateTime使用Carbon API扩展,则可以使用以下内容获取该月的最后一天:
1 2 3 4 | $date = Carbon::now(); $date->addMonth(); $date->day = 0; echo $date->toDateString(); // use toDateTimeString() to get date and time |
你可以找到几个月的最后一天。但只是你可以使用PHP strtotime()和date()函数来做到这一点。我想你的最终代码看起来像这样:
现场演示
但是如果你使用PHP> = 5.2我强烈建议你使用新的DateTime对象。例如如下:
1 2 3 4 | $a_date ="2009-11-23"; $date = new DateTime($a_date); $date->modify('last day of this month'); echo $date->format('Y-m-d'); |
现场演示
此外,您可以使用自己的功能解决此问题,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /** * 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('Y-m-d', $result); } $a_date ="2009-11-23"; echo last_day_of_the_month($a_date); |
您也可以将它与日期时间一起使用
1 2 3 | $date = new \DateTime(); $nbrDay = $date->format('t'); $lastDay = $date->format('Y-m-t'); |
使用Zend_Date非常简单:
1 | $date->setDay($date->get(Zend_Date::MONTH_DAYS)); |
1 2 3 | $date1 = $year.'-'.$month; $d = date_create_from_format('Y-m',$date1); $last_day = date_format($d, 't'); |
这是一个完整的功能:
1 2 3 4 5 |
这将输出如下:
1 | echo get_number_of_days_in_month(2,2014); |
产量:28
If you have a month wise get the last date of the month then,
1 2 3 4 5 6 7 |
有办法获得一个月的最后一天。
1 2 3 4 5 6 7 8 9 10 11 | //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]); |
我迟到了,但有一些简单的方法可以做到这一点:
1 2 3 |
使用mktime()是我完全控制时间的各个方面......
I.E.
将日期设置为0并将月份设置为1将为您提供上个月的最后一天。 0和负数在不同的争论中具有相似的影响。
PHP:mktime - 手动
正如少数人所说,strtotime不是最坚实的方式,如果没有那么容易多才多艺。
另一种使用mktime而不是date('t')的方法:
1 2 |
所以这样计算它是31,30还是29
PHP DateTime的Carbon API扩展
1 | Carbon::parse("2009-11-23")->lastOfMonth()->day; |
要么
1 | Carbon::createFromDate(2009, 11, 23)->lastOfMonth()->day; |
将重新开始
1 | 30 |
我把它包装在我的日期时间助手课程中
https://github.com/normandqq/Date-Time-Helper
运用
它完成了
1 2 3 4 5 6 7 8 9 | 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('Y-m-d', $result); } } |
http://zkinformer.com/?p=134
这是一个更优雅的方式来结束这个月:
1 2 |
您可以在日期函数中使用"
代码将是这样的:
1 2 3 4 5 6 7 8 9 10 11 | 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("Y-n-j", lastDateOfMonth($Month))." "; |
代码是自我解释的。所以希望它有所帮助。