Carbon::now() 提供错误数据
Carbon::now() Giving Wrong Data
我在 Laravel 中使用 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, $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 时)
{
"code": 200,
"message": "Successful",
"time": {
"start": {
"date": "2021-03-01 00:00:00.000000",
"timezone_type": 3,
"timezone": "Asia/Dhaka"
},
"end": {
"date": "2021-03-31 23:59:59.000000",
"timezone_type": 3,
"timezone": "Asia/Dhaka"
}
}
}
我无法弄清楚这里的问题。
提前致谢。
Carbon::now()->year($year)->month($month)->day(1)->hour(0)->minute(0)->second(0);
有问题,因为它首先更改 year/month,然后再更改其余部分,因此它可能会溢出。
第一个快速修复是:
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_time->daysInMonth
getter,这样您就不需要调用 cal_days_in_month
我在 Laravel 中使用 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, $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 时)
{
"code": 200,
"message": "Successful",
"time": {
"start": {
"date": "2021-03-01 00:00:00.000000",
"timezone_type": 3,
"timezone": "Asia/Dhaka"
},
"end": {
"date": "2021-03-31 23:59:59.000000",
"timezone_type": 3,
"timezone": "Asia/Dhaka"
}
}
}
我无法弄清楚这里的问题。
提前致谢。
Carbon::now()->year($year)->month($month)->day(1)->hour(0)->minute(0)->second(0);
有问题,因为它首先更改 year/month,然后再更改其余部分,因此它可能会溢出。
第一个快速修复是:
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_time->daysInMonth
getter,这样您就不需要调用 cal_days_in_month