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此错误页面中所示:
这看起来像是人们经常询问的/ 和对象这个奇怪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转换为字符串到时间戳回到字符串,你只需要直接转换为字符串一次.