PHP获取上下月的第一天与最后一天的正确姿势

从PHP5.3开始, date新增了“first day of” 和 “last day of”

<?php
$date = strtotime('2019-03-31');
echo date('Y-m-d', $date).PHP_EOL;
//输出2019-03-31
echo date('Y-m-d', strtotime('-1 month', $date)).PHP_EOL;
//输出2019-03-03

//获取正确的上一个月第一天
echo date('Y-m-d', strtotime('first day of -1 month', $date)).PHP_EOL;
//输出2019-02-01

//获取正确的上一个月第最后一天
echo date('Y-m-d', strtotime('last day of -1 month', $date)).PHP_EOL;
//输出2019-02-28

//获取正确的下一个月第一天
echo date('Y-m-d', strtotime('first day of +1 month', $date)).PHP_EOL;
//输出2019-04-01

//获取正确的下一个月第最后天
echo date('Y-m-d', strtotime('last day of +1 month', $date)).PHP_EOL;
//输出2019-04-30

封装函数

//加一个月
function plus1money($time = '')
{
    if($time=='') $time = time();
    $d1 = date('d', $time);
    $d2 = date('d', strtotime('last day of +1 month', $time));
    if ($d1 > $d2) {
        return strtotime('last day of +1 month', $time) + 60 * 60 * 24 - 1;
    } else {
        return strtotime('+1 month', $time) + 60 * 60 * 24 - 1;
    }
}