如何使用Carbon - Laravel获得上个月的第一天和最后一天

时间:2016-05-11 05:40:00

标签: php laravel date php-carbon

我需要使用Carbon Library的第一次上一天 上个月,我尝试的内容如下:

$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString();
$lastDayofPreviousMonth = Carbon::now()->endOfMonth()->subMonth()->toDateString();

我得到的结果是$firstDayofPreviousMonth = '2016-04-01'(当前月份是第5(5月))和$lastDayofPreviousMonth = '2016-05-01'

我为$firstDayofPreviousMonth获得了正确的结果,但它给了我30天的上一次结果,并给了$lastDayofPreviousMonth错误的结果。

任何人都可以帮我解决这个问题吗?

6 个答案:

答案 0 :(得分:44)

试试这个:

pm

答案 1 :(得分:30)

试试这个

$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString(); $lastDayofPreviousMonth = Carbon::now()->subMonth()->endOfMonth()->toDateString();

答案 2 :(得分:8)

这个......日期从00:00开始初始化,日期结束于23:59结束

$start = new Carbon('first day of last month');
$start->startOfMonth();
$end = new Carbon('last day of last month');
$end->endOfMonth();

答案 3 :(得分:7)

专门回答您的问题,为什么您的$lastDayofPreviousMonth收到了错误的结果。

让我们在你的例子中分解这个陈述:

Carbon::now()->endOfMonth()->subMonth()->toDateString();
// Carbon::now() > 2016-05-05
// ->endOfMonth() > 2016-05-31
// ->subMonth() > 2016-04-31 // Simply takes 1 away from 5.

这给我们留下了无效的日期 - 没有4月31日。额外的一天只是添加到最后一个有效日期(2016-04-30 + 1),该日期将日期推迟到5月(2016-05-01)。

如前所述,为了确保这种情况永远不会发生,请务必将日期重置为月份的第1天,然后再做其他事情(因为每个月都有第1天)。

$lastDayofPreviousMonth = Carbon::now()->startofMonth()->subMonth()->endOfMonth()->toDateString();
// Carbon::now() > 2016-05-05
// ->startofMonth() > 2016-05-01 00:00:00
// ->subMonth() > 2016-04-01 00:00:00
// ->endOfMonth() > 2016-04-30 23:59:59

答案 4 :(得分:3)

使用方法

时,Carbon内部目前存在错误
Carbon::now()->startOfMonth()->subMonth()->endOfMonth()->toDateTimeString();

对于那些有31天的月份,该错误会导致最后一天返回30。

IE - 如果您在三月份并且执行上述调用,它将返回2017-03-30而不是2017-03-31,如您所料。

当我在日期之间进行操作时,我最终使用了..

Carbon::now()->startOfMonth()->subSeconds(1)->toDateTimeString();

对于那些在31日结束的日子,最终得到了正确的日期dateTimeString。

答案 5 :(得分:0)

另一个解决方案是使用Carbon方法subMonthNoOverflow()

$lastDayofPreviousMonth = Carbon::now()->subMonthNoOverflow()->endOfMonth()->toDateString();

遇到每月31天的问题时,在这里找到了它:https://github.com/briannesbitt/Carbon/issues/627

相关问题