在PHP中检查以下自解释代码:
现实:
$dateTime = Carbon::createFromDateTime(2017, 2, 23);
echo $dateTime; // 2017-02-23 00:00:00
echo $dateTime->startOfYear(); // 2017-12-31 23:59:59
echo $dateTime; // 2017-12-31 23:59:59
注意,在第4行,$dateTime
的值是2017-12-31 23:59:59
。这是因为在第三行。
我知道Carbon的startOfYear()是一个修饰符,但我们如何在不修改它本身的情况下获得一年的开始日期呢
预期:
$dateTime = Carbon::createFromDateTime(2017, 2, 23);
echo $dateTime; // 2017-02-23 00:00:00
echo $dateTime->startOfYear(); // 2017-12-31 23:59:59
echo $dateTime; // 2017-02-23 00:00:00
注意上面的第四行。实际上,第4行输出2017-12-31 23:59:59
。
4条答案
按热度按时间r1zk6ea11#
就像@SteD提到的,你可以使用复制函数来获取现有的示例,而不是修改它。
ttisahbt2#
使用
copy()
从docs
您还可以创建现有Carbon示例的副本()。正如预期的那样,日期、时间和时区值都被复制到新示例中。
ovfsdjhp3#
您正在替换第3行中$datetime变量的值。有效地:
要解决此问题,您需要执行以下操作:
现在你两个约会都有了。可能有更多的方法来剥猫的皮,但在不了解碳的情况下,这是保持两者的最简单方法。
balp4ylt4#
延迟响应- Carbon现在支持类的“不可变”版本,其中
endofYear()
和类似的修饰符返回一个新的示例和修改后的数据,原始对象保持不变。更多信息在这里:https://medium.com/@jaketaylor_52917/how-to-use-carbon-2-0s-carbonimmutable-class-in-laravel-5-8-af7e794efbf7