从SimpleXMLElement传递数据时的PHP date()警告

时间:2014-04-17 19:58:36

标签: php xml xml-parsing

我有一组像这样的XML数据。

<data>
    <person>
        <name>Alice</name>
        <date>343658755</date>
    </person>
    <person>
        <name>Bob</name>
        <date>655389955</date>
    </person>
    <person>
        <name>Cathy</name>
        <date>741876355</date>
    </person>
</data>

使用PHP我使用SimpleXMLElement解析它并尝试以日期格式显示时间戳。

$data = new SimpleXMLElement($xmlstr);
echo date( 'Y-m-d H:i:s', $data->person[0]->date);

显示以下警告。

Warning:  date() expects parameter 2 to be long, object given in ....

回显$data->person[0]->date显示时间戳没有任何问题。 var_dump()显示以下输出。

object(SimpleXMLElement)#3 (1) {
  [0]=>
  string(9) "343658755"
}

我如何&#34;参考&#34;直接到这个字符串?如果这个字符串在一个对象里面,那么当我回显它时,为什么没有错误/警告?

我能使用date()函数的唯一方法是将它转换为这样的整数类型。

echo date( 'Y-m-d H:i:s', (int) $data->person[0]->date );

它适用于所有版本的PHP吗?这样做有什么不好吗?

1 个答案:

答案 0 :(得分:1)

错误信息非常清楚。 date()函数需要参数为long,但您要传递的是SimpleXML对象。

var_dump()输出$data->person[0]->date可以看出,它是一个对象。要获得时间戳部分,您必须将其转换为字符串。

这适用于所有地方。在使用SimpleXML时,您必须将对象显式地转换为字符串才能访问其中的内容。对于这种特殊情况,以下内容应该有效:

echo date('Y-m-d H:i:s', (string) $data->person[0]->date);