PHP DateTime __construct()无法解析位置x的时间字符串(xxxxxxxx)

时间:2013-07-02 13:54:55

标签: php datetime

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

  

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

对象创建代码是:

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

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

  

1372622987

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

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

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

5 个答案:

答案 0 :(得分:71)

如果你硬编码,你应该使用setTimestamp:

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

在你的情况下

$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);

答案 1 :(得分:13)

使用createFromFormat方法:

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

<强>更新

我现在建议使用Carbon

答案 2 :(得分:11)

将您的代码更改为此

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

它会正常工作

答案 3 :(得分:0)

$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);

答案 4 :(得分:0)

这对我有用。

   /**
     * 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 '';
    }