如何从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); } }
我使用$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";
代码是自我解释的。 所以希望它有帮助。