2017-08-26 132 views
0

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

  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小时输出。

+0

代码有错误。格式化日期,无需小时,分钟和秒 $ got2 = new DateTime(date('Y-m-d',$ fromdb)); 尝试 $ got2 = new DateTime(date('Y-m-d H:i:s',$ fromdb)); – Dmitry

+0

@Dmitry那么什么是正确的方法? – AndrewGG

回答

2

我觉得

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

打破了你的代码。 尝试

$got2->setTimestamp($fromdb) 
+0

setTimestamp()函数修复了一个问题。另外,改变格式也有帮助。谢谢大家:) – AndrewGG

1

代码有错误。你格式化日期而不小时,分钟和秒

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

尝试

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

这减少了2小时的时间。但应该是45分钟。 – AndrewGG

+0

这是因为你的时间戳1503737539是4小时前。 $ fromdb ='1503737539'; $ curtime = time(); echo($ curtime - $ fromdb)/ 60/60。 PHP_EOL; – Dmitry

+0

Thnaks,改变格式帮了很多:) – AndrewGG

1

尝试

$日期=新的DateTime();回声$日期 - >格式( 'U = Y-M-d H:I:S');

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