从 PHP < 5.3 中的时间戳创建 DateTime

Posted

技术标签:

【中文标题】从 PHP < 5.3 中的时间戳创建 DateTime【英文标题】:Creating DateTime from timestamp in PHP < 5.3 【发布时间】:2011-05-18 19:25:55 【问题描述】:

在低于

在 5.3 中会是:

$date = DateTime::createFromFormat('U', $timeStamp);

DateTime 构造函数需要一个字符串,但这对我不起作用

$date = new DateTime("@$timeStamp");

【问题讨论】:

根据手册,应该可以。你试过$date = new DateTime('@' . $timeStamp); 吗?你说的“没用”是什么意思? 定义对我不起作用。错误?日期/时间错误? 致命错误:未捕获的异常 'Exception' 带有消息 'DateTime::__construct() [datetime.--construct]:失败在位置 0 (@) 解析时间字符串 (@):意外字符' @Yarin:它给你这个错误,因为时间戳是空的。找出原因。 var_dump($timeStamp) 带给你什么? 【参考方案1】:

php 5 >= 5.3.0

$date = new DateTime();
$date->setTimestamp($timeStamp);

编辑:setTimestamp添加了正确的PHP版本

【讨论】:

认为这是 PHP 5 >= 5.3 这个答案不正确,php 5.3中添加了setTimestamp()【参考方案2】:

假设您想要日期和时间,而不仅仅是上一个答案中的日期:

$dtStr = date("c", $timeStamp);
$date = new DateTime($dtStr);

但必须这样做似乎很愚蠢。

【讨论】:

此解决方案有效,但不必要地花费时间格式化日期字符串,然后重新解析。【参考方案3】:

它不起作用,因为您的 $timeStamp 变量为空。在创建 DateTime 之前尝试回显 $timeStamp 的值,您会看到。如果你运行这个:

new DateTime('@2345234');

您不会收到错误消息。但是,如果您运行:

new DateTime('@');

它会产生你说它给你的确切错误。您需要进行一些调试并找出 $timeStamp 为空的原因。

【讨论】:

请注意,在构造函数中使用 @ 将忽略环境的当前时区和在第二个参数中提供的时区。即使使用 $dateTime-&gt;modify('@' . 1234) 使用 setTimezone(date_default_timezone_get()) 从UTC 时区到环境时区。 当我使用带有空时间戳的“@”时遇到了同样的问题,感谢您的回答。 PHP 给出的错误消息没有多大帮助,它暗示“@”是问题所在。【参考方案4】:

以下作品:

$dateString = date('Ymd', $timeStamp);
$date = new DateTime($dateString);

【讨论】:

Timestamp[1] 不仅仅是 Ymd,它是自 1970 年 1 月 1 日 UTC 以来的秒数(在某些情况下是微秒)。 [1] = en.wikipedia.org/wiki/Unix_time 那么可能是$dateString = date('U', $timeStamp);?!

以上是关于从 PHP < 5.3 中的时间戳创建 DateTime的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 中的时间戳获取日期名称

在布局中的 Laravel 5.3 视图中包含 PHP 变量

PHP获取常用时间区间

RouteCollection.php 第 161 行 Laravel 5.3 中的 NotFoundHttpException

如何将 PHP 5.6 降级到 PHP 5.3?

如何将PHP 5.6降级到PHP 5.3?