设置没有溢出的日期(使用 PHP Carbon)
Set day with no overflow (with 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()
,这确实很有帮助,但没有比这更适合设置一天的了。
你能用 endOfMonth()
代替吗?
Carbon::create(2018, 2, 27, 0, 0, 0)->endOfMonth();
Carbon documentation 中有完整的修饰符列表。
从 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),
}
或者您可以使用 addUnitNoOverflow
和 subUnitNoOverflow
很简单:
$date = Carbon\Carbon::now();
$date->day = 10;
$date->month = 1;
$date->year = 2021;
答案是
$day = 31;
$date = Carbon::create(2018, 2, 27, 0, 0, 0);
$date->day(min($day, $date->daysInMonth));
我使用 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()
,这确实很有帮助,但没有比这更适合设置一天的了。
你能用 endOfMonth()
代替吗?
Carbon::create(2018, 2, 27, 0, 0, 0)->endOfMonth();
Carbon documentation 中有完整的修饰符列表。
从 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),
}
或者您可以使用 addUnitNoOverflow
和 subUnitNoOverflow
很简单:
$date = Carbon\Carbon::now();
$date->day = 10;
$date->month = 1;
$date->year = 2021;
答案是
$day = 31;
$date = Carbon::create(2018, 2, 27, 0, 0, 0);
$date->day(min($day, $date->daysInMonth));