62

尝试使用时间戳创建新的 DateTime 对象时出现此构造错误:

异常:DateTime::_ construct():无法在位置 8 (8) 解析时间字符串 (1372622987):DateTime-> _construct()中的意外字符

对象创建代码为:

$start_date = new DateTime( "@{$dbResult->db_timestamp}" );

其中 $dbResult->db_timestamp 是取自数据库的有效 unix 时间戳。有问题的时间戳是:

1372622987

对于传递的无效格式,我会理解这个错误,但这是一个真正的时间戳。

原因很奇怪:我运行了一个脚本来创建一个新的 DateTime 对象,其中时间戳作为硬编码值传入,并且它没有报告任何错误。

这似乎是一次性的,但如果有一个,我需要一个解释,因为我不能让这种情况再次发生。

4

5 回答 5

93

如果您对其进行硬编码,则应该使用 setTimestamp :

$start_date = new DateTime();
$start_date->setTimestamp(1372622987);

在你的情况下

$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
于 2013-07-02T14:00:41.717 回答
15

使用createFromFormat方法:

$start_date = DateTime::createFromFormat("U", $dbResult->db_timestamp);

更新

我现在推荐使用Carbon

于 2013-07-02T13:59:48.413 回答
12

将您的代码更改为此

$start_date = new DateTime( "@" . $dbResult->db_timestamp );

它会正常工作

于 2013-07-02T13:59:40.903 回答
1

这对我有用。

   /**
     * return date in specific format, given a timestamp.
     *
     * @param  timestamp  $datetime
     * @return string
     */
    public static function showDateString($timestamp)
    {
      if ($timestamp !== NULL) {
        $date = new DateTime();
        $date->setTimestamp(intval($timestamp));
        return $date->format("d-m-Y");
      }
      return '';
    }
于 2015-05-19T06:56:11.170 回答
0
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
于 2013-07-02T14:02:06.123 回答