2017-08-26 192 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');