【问题标题】:Creating DateTime from timestamp in PHP < 5.3从 PHP < 5.3 中的时间戳创建 DateTime
【发布时间】: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) 带给你什么?

标签: php datetime timestamp php-5.2


【解决方案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);?!
猜你喜欢
  • 2015-01-02
  • 2017-03-26
  • 2012-08-15
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
相关资源
最近更新 更多