从 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->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的主要内容,如果未能解决你的问题,请参考以下文章
在布局中的 Laravel 5.3 视图中包含 PHP 变量
RouteCollection.php 第 161 行 Laravel 5.3 中的 NotFoundHttpException