为什么我只能在使用之前转储()它时才能到达我的日期对象?

118*_*218 2 php datetime var-dump symfony

为什么我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;

}
Run Code Online (Sandbox Code Playgroud)

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

dump($subscriptionEndDate);

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

在此输入图像描述

Don*_*nic 7

这看起来像是人们经常询问的/ 对象这个奇怪var_dumpprint_rDateTime外观的另一个例子.

date属性$subscriptionEndDate通过dump函数添加到DateTime对象中,以提供内部数据的人类可读表示,但默认情况下它不是对象的属性.

您可以只创建一个新的DateTime对象来表示当前的日期和时间,而不是获取字符串.这些对象可以直接比较(自PHP 5.2.2起).

所以不是这样的:

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

用这个:

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

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

date('d/m/Y',strtotime($subscriptionEndDateDate)
Run Code Online (Sandbox Code Playgroud)

所以你可以改用这个format方法.

$subscriptionEndDate->format('d/m/Y')
Run Code Online (Sandbox Code Playgroud)

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

  • 先生,你是一个救生员!我也有两年前的那个,我无法管理它工作大声笑.该项目现在已经死了,但请先生,接受我的upvote. (2认同)