-2

我有这个:

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

还有其他方法吗?

谢谢

4

3 回答 3

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);
于 2013-11-12T17:38:41.070 回答
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

于 2013-11-12T17:44:53.353 回答
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)

看到它工作

于 2013-11-12T17:50:39.100 回答