Carbon in Laravel -- 在整数上调用成员函数 addDay()

Carbon in Laravel -- Call to a member function addDay() on integer

我正在尝试构建一个调度程序,其中需要增量日加减法。

在这里,每次通过我设置路由到某个位置的按钮执行此功能时,我只是尝试向此变量(在其他地方显示给用户)添加一天。但是,我不断收到此错误

Call to a member function addDay() on integer

每当我尝试执行此操作时。我刚开始使用 Carbon 接口并查看了文档,这让我尝试解析该函数​​(当我对字符串有同样的错误时有效)但显然无济于事。感谢您提供任何帮助 and/or 可能解释此错误是如何真正起作用的。

function addDay(){
$day = (int) Carbon::now()->format('j');
$day = $day->addDay();
}

提前致谢。如果有更好的方法来做到这一点(使用 button/link 逐渐增加天数),我很想听听。在应用程序上工作了一整天后,我的逻辑似乎有问题。

您使用第一个 $day 变量中的 (int)Carbon 日期对象转换为 integer。因此,当您尝试访问函数 addDay() 时,它失败了,因为 $day 不再是 Carbon 对象,而是 integer.

$day = Carbon::now();
$day = $day->addDay()->format('j');

这应该可行,如果您出于某种原因需要将其转换为 integer,请按此操作。

$day = Carbon::now();
$day = (int) $day->addDay()->format('j');

通过这种方式,您可以在添加日期后施放 integer

这种语法还有一种更简洁的方法,它使用像这样的方法链接

$day = (int) Carbon::now()->addDay()->format('j');

正如@Classified 所说,但更简洁的方法是先使用 Carbon 对象,然后在其上应用格式。

像这样:

$dateObj = Carbon::now()->addDay(); $day = (int) $dateObj->format('j');

更简洁的方法和更好的可读性。

您必须 addDay Carbon 实例而不是整数(天):

$dt = Carbon::create(2012, 1, 31, 0);    // 2012-01-31 00:00:00
echo $dt->addDay();                      // 2012-03-04 00:00:00

期望的返回值是多少?

$day = Carbon::now()->addDay();
return $day->dayOfWeek; //day of the week, 03/08/18 (now) returns 6 (INT)
return $day->format('j'); //day of the month, 03/08/18 (now) returns "4" (STRING)
return $day->day; //day of the month, 03/08/18 (now) returns 4 (INT)
return $day //Carbon object (at now() + 24h) that you can manipulate