Laravel 5 Carbon::now()提供错误的数据
我在拉维尔从事碳工作 问题:我需要使用carbon::now()->month()函数创建碳日期。在所有其他月份,它都运转良好。但当我试图确定2021年2月的日期时,它总是给我2021年3月的日期 下面是我的功能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
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);