获取上个月的第一天和最后一天

时间:2013-11-12 17:35:55

标签: php date

我有这个:

$today=date('Y-m-d');
// echo "2013-11-12";

我想得到像这样的上个月范围:

$startLastMonth = "2013-10-01";
$endLastMonth   = "2013-10-31";

我尝试了但是它不符合我的愿望,因为我需要把42:

$startLastMonth = mktime(0, 0, 0, date("Y"), date("m"),   date("d")-42);

还有其他办法吗?

由于

3 个答案:

答案 0 :(得分:4)

以下代码应该有效

$startLastMonth = mktime(0, 0, 0, date("m") - 1, 1, date("Y"));
$endLastMonth = mktime(0, 0, 0, date("m"), 0, date("Y"));

你正在做的是告诉PHP a)你想要上个月的第一天(date("m") - 1),和b)告诉PHP你想要当前的第0天月,根据mktime文档,它成为上个月的最后一天。可以在此处找到文档:http://php.net/manual/en/function.mktime.php

如果你想像你可以那样格式化输出

$startOutput = date("Y-m-d", $startLastMonth);
$endOutput = date("Y-m-d", $endLastMonth);

答案 1 :(得分:3)

只需使用PHP提供的相对日期/时间格式:

var_dump( new DateTime( 'first day of last month' ) );
var_dump( new DateTime( 'last day of last month' ) );

请参阅:http://www.php.net/manual/en/datetime.formats.relative.php

答案 2 :(得分:0)

这是一个方便的小功能,可以做你想要的。您将返回一个包含上个月的第一天和最后一天的数组到提供的日期: -

function getLastMonth(DateTime $date)
{
    //avoid side affects
    $date = clone $date;
    $date->modify('first day of last month');
    return array(
        $date->format('Y-m-d'),
        $date->format('Y-m-t'),
    );
}

var_dump(getLastMonth(new \DateTime()));

输出: -

array (size=2)
  0 => string '2013-10-01' (length=10)
  1 => string '2013-10-31' (length=10)

在PHP> 5.3你可以这样做: -

list($start, $end) = getLastMonth(new \DateTime());
var_dump($start, $end);

输出: -

string '2013-10-01' (length=10)
string '2013-10-31' (length=10)

See it working