我正在創建通知系統,下面是一個任務:獲取發送通知時的時間。我的意思是:1分鐘前,13小時前等等。我已經編寫了一個腳本,但它顯示了錯誤的時間。例如,不顯示「5分鐘前」,而是顯示「9小時前」。這裏是alrogithm:錯誤的日期時間
- 從數據庫中獲取舊的時間戳。舊時間戳是發送 通知時的時間。
- 獲取當前用戶的時間戳。
- 獲得它們之間的區別。
- 回聲結果。
這裏是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
@Dmitry那麼什麼是正確的方法? – AndrewGG