碳2日期解析返回不同的结果

问题描述 投票:2回答:3

因此,我从类似2020-05-23的网址中获取了一个日期,而我试图将其解析为一个碳对象,因此以下遵循代码的方法可以正常工作

 $newDate = Carbon::parse('2020-05-23');
 dd($newDate);

返回此值:

Carbon\Carbon @1590192000 {#279 ▼
   date: 2020-05-23 00:00:00.0 UTC (+00:00)
}

什么是正确的,但是当我尝试获取本月的第一天和最后一天时,它会更改变量?

$newDate = Carbon::parse($date);
//dd($newDate);
dd($newDate, $newDate->firstOfMonth(), $newDate->endOfMonth());

然后返回此

Carbon\Carbon @1590969599 {#279 ▼
   date: 2020-05-31 23:59:59.999999 UTC (+00:00)
}
Carbon\Carbon @1590969599 {#279 ▼
   date: 2020-05-31 23:59:59.999999 UTC (+00:00)
}
Carbon\Carbon @1590969599 {#279 ▼
   date: 2020-05-31 23:59:59.999999 UTC (+00:00)
}

因此它将日期更改为20202-05-31吗?并且->firstOfMonth()返回与->endOfMonth相同的消息Im无法正确解析日期?

同样,当我将Carbon::parse('2020-05-23')更改为Carbon::now()时,它也可以正常工作,但日期当然有所不同

php php-carbon
3个回答
2
投票

日期实例为mutable,这意味着当您执行类似$newDate->firstOfMonth()的操作时,它将更改$newDate

您可以在文档https://carbon.nesbot.com/docs/#api-introduction的简介中阅读此内容>

所以当您这样做

dd($newDate, $newDate->firstOfMonth(), $newDate->endOfMonth());

将参数传递给firstMonth()之前,它将执行endOfMonth(),然后执行dd(),并且由于$newDate是可变的,所以参数内容将是月底的三倍。

您可以做的是

dd($newDate, $newDate->copy()->firstOfMonth(), $newDate->copy()->endOfMonth());

1
投票

Carbon::Parse返回一个可变对象。这意味着这些方法将更改您正在使用的对象,而不是返回新对象并保持原始状态不变。


0
投票

所以我找到了问题,我不知道为什么会发生?

© www.soinside.com 2019 - 2024. All rights reserved.