【问题标题】:Wrong time with DateTimeDateTime 的时间错误
【发布时间】:2017-08-26 12:29:24
【问题描述】:

我正在创建通知系统,这里有一个任务:获取发送通知的时间。我的意思是:1 分钟前、13 小时前等等。我已经编写了一个脚本,但它显示错误的时间。例如,不是显示“5 分钟前”,而是显示“9 小时前”。这是算法:

  1. 从数据库中获取旧的时间戳。旧时间戳是时间,当一个 通知已发送。
  2. 获取当前用户时间戳。
  3. 找出它们之间的区别。
  4. 回显结果。

这是 PHP 代码:

$fromdb = '1503737539'; //For this example think, that this variable is from database. 
//This timestamp was created 5 minutes earlier, so in result it should show '5 minutes ago'.

    $curr = new DateTime();
    $got2 = new DateTime(date('Y-m-d H:i:s',$fromdb));
    $interval = $curr->diff($got2);
    echo $interval->format('%d')." days ".$interval->format('%h')." Hours ".$interval->format('%i')." Minutes ".$interval->format('%s')." Seconds";

输出是:

0 天 9 小时 ....

而不是

0 天 0 小时 5 分钟 ....

我该如何解决这个问题?我想这是时区的问题。但是我怎么能猜出客人的时区呢?

更新: 更改代码: $got2 = new DateTime(date('Y-m-d H:i:s',$fromdb));

还有一个有趣的事实:实际差异越大,它在输出中显示的时间就越少。例如:旧时间戳创建于上午 8:00,当前为下午 15:00,输出时显示 0 天 1 小时。

【问题讨论】:

  • 您的代码有错误。你格式化没有小时、分钟和秒的日期 $got2 = new DateTime(date('Y-m-d',$fromdb));试试 $got2 = new DateTime(date('Y-m-d H:i:s',$fromdb));
  • @Dmitry 那么什么是正确的方法?

标签: php datetime timestamp


【解决方案1】:

我认为

date('Y-m-d',$fromdb)

破坏了您的代码。 试试

$got2->setTimestamp($fromdb)

【讨论】:

  • setTimestamp() 函数修复了一个问题。此外,改变格式也有帮助。谢谢大家:)
【解决方案2】:

您的代码有错误。你格式化没有小时、分钟和秒的日期

$got2 = new DateTime(date('Y-m-d',$fromdb));

试试

$got2 = new DateTime(date('Y-m-d H:i:s',$fromdb)); 

【讨论】:

  • 这将时间减少到 2 小时。但应该是 45 分钟。
  • 这是因为您的时间戳 1503737539 是 4 小时前。 $fromdb = '1503737539'; $curtime = 时间();回声 ($curtime - $fromdb) / 60 / 60 。 PHP_EOL;
【解决方案3】:

试试

$date = new DateTime(); echo $date->format('U = Y-m-d H:i:s');

$date->setTimestamp(1171502725); echo $date->format('U = Y-m-d H:i:s');

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 2016-07-25
    • 2012-10-09
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多