Laravel + DateTime:日期属性未定义?

时间:2016-12-09 11:57:55

标签: php laravel datetime

这样可以很好地工作(这意味着我可以在$today->date处理这个问题):

$today = new \DateTime('NOW');
$today->format('Ymd');
var_dump($today);
$date = date('Ymd', strtotime($today->date . ' +1 Weekday'));

但这会引发错误:

$today = new \DateTime('NOW');
$today->format('Ymd');
var_dump($today);
$date = date('Ymd', strtotime($today->date . ' +1 Weekday'));

错误是:

Undefined property: DateTime::$date

这很奇怪!似乎$today(DateTime对象)将作为一个对象,或者至少它的date属性将存在,​​只有在它被调用时才会存在(在var_dump这里。 ..)之前一次。

我做错了什么?

注意:我一直在做作业,this answer告诉DateTime object中没有->date属性。

$today->date正在我的示例中工作而var_dump正在返回此内容:

object(DateTime)#493 (3) { 
   ["date"]=> string(26) "2016-12-09 11:51:00.000000"
   ["timezone_type"]=> int(3)
   ["timezone"]=> string(3) "UTC"
}

当然,使用date作为数组键也不起作用:

Cannot use object of type DateTime as array

注意:没有回答问题,但如果有问题的人需要,可以通过这种方式获得DateTime对象的字符串值(自己的格式):

$today = new \DateTime('NOW');
$date = $today->modify('+1 Weekday')->format('Ymd');

1 个答案:

答案 0 :(得分:2)

在Laravel中,有一种使用Carbon类来处理日期时间操作的标准。它是标准PHP DateTime对象的包装器,但却增加了许多有用的方法http://carbon.nesbot.com/docs/ 所以你可以像现在这样

$now=Carbon::now();
$now->addDay(); // or
$now->addDays(1);  // to add one or whatever days to current

注意Carbon对象上的修饰符,例如addDays(1)会改变原始对象,所以如果你需要保持它不受影响的某些puprose只需先克隆它

$another_date=clone($now); 
$another_date->addDays(1); // $now still untouched

格式化为字符串使用

 $now->format('Y m d');  

 $now->toDateString();                          // 2016-12-10
 $now->toFormattedDateString();                 // Dec 10, 2016

格式化与PHP中的DateTime相同。