Laravel 5 Carbon::now()提供错误的数据

Laravel 5 Carbon::now()提供错误的数据,laravel-5,php-carbon,Laravel 5,Php Carbon,我在拉维尔从事碳工作 问题:我需要使用carbon::now()->month()函数创建碳日期。在所有其他月份,它都运转良好。但当我试图确定2021年2月的日期时,它总是给我2021年3月的日期 下面是我的功能 function findStartEndDateOfAMonth($month, $year) { //Here $month = 2, $year = 2021 $days_in_month = cal_days_in_month(CAL_GREGORIAN, $m

我在拉维尔从事碳工作

问题:我需要使用carbon::now()->month()函数创建碳日期。在所有其他月份,它都运转良好。但当我试图确定2021年2月的日期时,它总是给我2021年3月的日期

下面是我的功能

function findStartEndDateOfAMonth($month, $year)
{
    //Here $month = 2, $year = 2021
    $days_in_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
    $start_time    = Carbon::now()->year($year)->month($month)->day(1)->hour(0)->minute(0)->second(0);

    $end_time      = Carbon::now()->year($year)->month($month)->day($days_in_month)->hour(23)->minute(59)->second(59);
    return [
      'start_time'    => $start_time,
      'end_time'      => $end_time,
      'days_in_month' => $days_in_month
    ];
} 
以下是输出:

{
  "code": 200,
  "message": "Successful",
  "time": {
   "start": {
      "date": "2021-03-01 00:00:00.000000",
      "timezone_type": 3,
      "timezone": "Asia/Dhaka"
    },
    "end": {
      "date": "2021-03-28 23:59:59.000000",
      "timezone_type": 3,
      "timezone": "Asia/Dhaka"
    }
  }
}
类似的结果是在3月份给出(当我给出$month=3时)

我搞不懂这里的问题

提前谢谢

Carbon::now()->year($year)->month($month)->day(1)->hour(0)->minute(0)->second(0);
是buggy,因为它先更改年/月,然后再更改其余的,因此可能会溢出

第一个快速解决方法是:

Carbon::now()->day(1)->year($year)->month($month)->hour(0)->minute(0)->second(0);
但不应将日期更改6次,而应使用
setDateTime
一次修改所有日期:

Carbon::now()->setDateTime($year, $month, 1, 0, 0, 0);
最后一个问题是:如果您使用
now()
更改所有值,那么为什么不简单地
create
这样您就不会发生任何变异

Carbon::create($year, $month, 1, 0, 0, 0);

对于记录,您可以在您创建的对象上使用
$start\u time->daysInMonth
getter,这样您就不需要调用
cal\u days\u in\u month

首先设置月份。今天是29岁。今年二月没有29天。
Carbon::create($year, $month, 1, 0, 0, 0);