gpt4 book ai didi

php - 为什么我只能在使用之前 dump() 时才能到达日期对象?

转载 作者:行者123 更新时间:2023-12-03 02:37:33 25 4
gpt4 key购买 nike

为什么我只能在使用之前 dump() 时才能访问我的日期对象?

这是我的功能:

public function checkSubscriptionEndDate($user){

$subscriptionEndDate = $user->getSubscriptionEndDate();

dump($subscriptionEndDate);

if($subscriptionEndDate==null){
$subscriptionEndDateMessage = $this->get('translator')->trans('subscriptionEndDateMessage');
$subscriptionStatus = "error";
}else{

$subscriptionEndDateDate = $subscriptionEndDate->date;
// CHECK IF SUBSCRIPTION END DATE IS BEFORE NOW
if (date('now') < $subscriptionEndDateDate) {
dump('before');
$subscriptionStatus = "success";
$subscriptionEndDateMessage = $this->get('translator')->trans('subscriptionStatusSuccess').' '.date('d/m/Y',strtotime($subscriptionEndDateDate));
}else{
dump('after');
$subscriptionStatus = "error";
$subscriptionEndDateMessage = $this->get('translator')->trans('subscriptionStatusError').' '.date('d/m/Y',strtotime($subscriptionEndDateDate));
}
}

return array(
'subscriptionEndDateMessage' => $subscriptionEndDateMessage,
'subscriptionStatus' => $subscriptionStatus
);

return $subscriptionEndDateMessage;

}

当我这样做时,页面按预期加载,没有问题。但如果我删除这一行:

转储($subscriptionEndDate);

我无法再加载$subscriptionEndDate->date,如此错误页面所示:

enter image description here

最佳答案

这看起来像 this strange-looking thing with var_dump/print_r and DateTime objects 的另一个例子人们经常问到的问题。

转储函数将 date 属性添加到 $subscriptionEndDate 中的 DateTime 对象,以提供内部数据的人类可读表示,但事实并非如此默认情况下对象的属性。

您可以创建一个新的 DateTime 对象来表示当前日期和时间,而不是获取字符串。 Those objects are directly comparable (since PHP 5.2.2)。

所以代替这个:

$subscriptionEndDateDate = $subscriptionEndDate->date;
// CHECK IF SUBSCRIPTION END DATE IS BEFORE NOW
if (date('now') < $subscriptionEndDateDate) {

使用这个:

$now = new DateTime;
// CHECK IF SUBSCRIPTION END DATE IS BEFORE NOW
if ($now < $subscriptionEndDate) {

如果您尚未将 $subscriptionEndDate 转换为字符串 $subscriptionEndDateDate,则后面的部分将不起作用:

date('d/m/Y',strtotime($subscriptionEndDateDate)

所以你可以使用format方法代替。

$subscriptionEndDate->format('d/m/Y')

在我看来,这似乎更好,因为您不会从 DateTime 转换为字符串,再将时间戳转换回字符串,您只需直接转到字符串一次。

关于php - 为什么我只能在使用之前 dump() 时才能到达日期对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47291119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com