设置当天无溢出(使用PHP Carbon)

时间:2018-07-12 00:35:55

标签: php laravel php-carbon

我使用Carbon(PHP库)将日期设置为日期。但我希望它不会到下个月,而要停下来,直到月底。 示例:

Carbon::create(2018, 2, 27, 0, 0, 0)->day(31);

我要

  

2018-03-03 00:00:00

但是我需要

  

2018-02-28 00:00:00

当您运营数月时,Carbon会给您->subMonthsNoOverflow()和->addMonthsNoOverflow(),这确实很有帮助,但是设置一天没有这样的事情。

4 个答案:

答案 0 :(得分:1)

您可以改用endOfMonth()吗?

Carbon::create(2018, 2, 27, 0, 0, 0)->endOfMonth();

Carbon documentation中有修饰符的完整列表。

答案 1 :(得分:1)

自Carbon 2.0起,他们添加了方法setUnitNoOverflow($unit, $value, $overflowUnit),但仍未公开。

我设法通过这种方式获得了2019-02-28

Carbon::parse('2019-02-01')->setUnitNoOverflow('day', 31, 'month')->format('Y-m-d')
 Carbon\Carbon @1551398399 {#3013
     date: 2019-02-28 23:59:59.999999 UTC (+00:00),
   }

或者,您可以使用addUnitNoOverflowsubUnitNoOverflow

Issue github- Source

答案 2 :(得分:0)

答案是

$day = 31;
$date = Carbon::create(2018, 2, 27, 0, 0, 0);
$date->day(min($day, $date->daysInMonth));

答案 3 :(得分:-1)

很简单:

$date = Carbon\Carbon::now();
$date->day = 10;
$date->month = 1;
$date->year = 2021;

文档:https://carbon.nesbot.com/docs/#api-setters