设置没有溢出的日期(使用 PHP Carbon)

Yev*_*yev 8 php laravel php-carbon

我使用 Carbon(PHP 库)将日期设置为日期。但我希望它不要持续到下个月,而是停止到月底。例子:

Carbon::create(2018, 2, 27, 0, 0, 0)->day(31);
Run Code Online (Sandbox Code Playgroud)

我越来越

2018-03-03 00:00:00

但是我需要

2018-02-28 00:00:00

当您运行几个月时,Carbon 会为您提供->subMonthsNoOverflow()和 ->addMonthsNoOverflow()这确实很有帮助,但没有什么比这更适合设定一天了。

cba*_*ier 8

自 Carbon 2.0 以来,他们添加了一种方法setUnitNoOverflow($unit, $value, $overflowUnit),但仍然没有记录。

我通过这样做成功获得了 2019-02-28

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

或者您可以使用addUnitNoOverflowsubUnitNoOverflow

问题 github - 来源

  • 不知道以前是否没有记录,但该文档已被正确记录。[Carbon 文档链接](https://carbon.nesbot.com/docs/#api-addsub) 它是加减日期之一,其中包含一个设置小时单位而不溢出日期的示例。假设它也不会溢出月份,因为月份没有溢出。 (2认同)

Yev*_*yev 3

答案是

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