尝试使用时间戳创建新的DateTime对象时出现此构造错误:
异常:DateTime :: _ construct():无法解析位置8(8)处的时间字符串(1372622987):DateTime中的意外字符 - > _construct()
对象创建代码是:
$start_date = new DateTime( "@{$dbResult->db_timestamp}" );
其中$ dbResult-> db_timestamp是从数据库中获取的有效unix时间戳。有问题的时间戳是:
1372622987
我会理解传递无效格式的错误,但这是一个真正的时间戳。
这是非常奇怪的原因:我运行了一个脚本来创建一个新的DateTime对象,其中时间戳作为硬编码值传入,并且它没有报告任何错误。
这似乎是一次性的,但我需要一个解释,如果有一个,因为我无法承受这种情况再次发生。
答案 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 '';
}