【问题标题】:Echo is not printing the object value [duplicate]回声没有打印对象值[重复]
【发布时间】:2014-06-30 23:24:46
【问题描述】:

如果我取消评论print_r($dateTime),那么此语句工作正常echo $dateTime->date;

为什么会这样。请给我建议。

 $current_date=date('Y-m-d H:i:s');
 $dateTime = DateTime::createFromFormat("Y-m-d H:i:s", $current_date, (new DateTimeZone('UTC')));

 $dateTime->setTimezone(new DateTimeZone('PST'));
 //print_r($dateTime); //If I print object then below echo stmt is working 

  echo $dateTime->date;

出现跟随错误

Notice: Undefined property: DateTime::$date in C:\xampp\htdocs\datetime.php 

【问题讨论】:

  • 你的php版本是多少?
  • 我的PHP版本是5.5.9
  • 旁注:你根本不需要date()。如果您使用DateTime,请坚持使用。混合使用不同的日期格式只会增加混乱。

标签: php mysql


【解决方案1】:

The DateTime class 没有名为 date 的属性。

您可能正在寻找 DateTime::format(string) 以输出具有特定格式的日期。
例如:

echo $dateTime->format('Y-m-d H:i')
// prints: 2014-05-13 12:29

【讨论】:

  • 是的!它正在工作。但它给出的对象是这样的 DateTime Object ( [date] => 2014-05-13 05:40:09 [timezone_type] => 3 [timezone] => America/Los_Angeles )
  • @user3580413 - 这是不可能的。你根本没有运行 Cobra 的代码。
  • 如何调用DateTime对象值日期
  • 它用这个语句显示日期 echo $dateTime->format('Y-m-d H:i') @ÁlvaroG.Vicario
  • @user3580413 - 您没有调用任何 date 属性。我刚刚写了一个关于这个的答案。 Cobra 的回答很好。
【解决方案2】:

echo $dateTime->date; 之前添加print_r($dateTime,1);,您的代码将按预期工作。

代码..

<?php
$current_date=date('Y-m-d H:i:s');
$dateTime = DateTime::createFromFormat("Y-m-d H:i:s", $current_date, (new DateTimeZone('UTC')));
$dateTime->setTimezone(new DateTimeZone('PST'));
print_r($dateTime,1);  //<-- Add this
echo($dateTime->date); // 2014-05-13 03:35:44 

Demo

【讨论】:

  • 这真的很有趣。 print_r() 具有实际创建 date 公共属性的副作用。然而它是一个静态属性,它不会反映对象的任何变化(直到你再次调用print_r())。
  • 但是 $dateTime 在这种情况下不是 static 对吗?
  • 我的意思是$dateTime-&gt;date。如果您执行$dateTime-&gt;modify('-1234 days'),则$dateTime-&gt;date 保持其旧值(直到您再次调用print_r())。这显然是对 DateTime 对象添加 print_r() 支持的人的黑客攻击,我敢肯定没有多少 PHP 开发人员知道这一点。它不是特别有用,但它是一个很酷的发现。
【解决方案3】:

DateTime 类的公共方法和属性是documented in the PHP manual。正如错误消息所示,其中没有 date 属性。事实上,这个类根本没有任何公共属性,只有常量和方法。

与几乎任何其他对象一样,转换为字符串的唯一可靠方法是使用专用方法。在DateTime中,方法为format()

DateTime 是用 C 编写的原生对象,而不是纯 PHP 类。因此,print_r() 和等效函数不一定显示与常规对象相同的信息。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2023-03-27
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多