我有一個SQL郵戳是這樣的:2012-02-20 21點十四分54秒打印出相對日期/時間從SQL/PHP郵戳
我怎麼會打印出PHP的相對日期和時間?
例如
發生:幾秒鐘前 發生:4分鐘前 發生:4小時前 發生:週一2012年1月8日
我只是想打印出的實際日期
我有一個SQL郵戳是這樣的:2012-02-20 21點十四分54秒打印出相對日期/時間從SQL/PHP郵戳
我怎麼會打印出PHP的相對日期和時間?
例如
發生:幾秒鐘前 發生:4分鐘前 發生:4小時前 發生:週一2012年1月8日
我只是想打印出的實際日期
一般來說,你選擇像秒時間單位,測試,如果時間差越小則該單位的最高值(60秒)後,發現這一點,如果是的話,打印出「$ timeDifference $單位「。如果不是,則將差值除以單位最大值並從下一個更高單位(分鐘)開始。
實施例:
$timeDif = 60*60*5 + 45; // == 5 hours 45 seconds
// 60 seconds in a minute
if ($timeDif < 60) // false
return "$timeDif second(s) ago";
// convert seconds to minutes
$timeDif = floor($timeDif/60); // == 300 = 5 * 60
// 60 minutes in an hour
if ($timeDif < 60) // false
return "$timeDif minute(s) ago";
// convert minutes to hours
$timeDif = floor($timeDif/60); // == 5
// 24 hours in a day
if ($timeDif < 24)
return "$timeDif hour(s) ago";
// ...
即沒有如此難以代碼。而且做起來相當有趣。 Here a sample,只要把雙手工作。
開始轉換SQL郵戳到unixtime這樣的:
$unixtime = strtotime('2012-02-20 21:14:54');
測試了他們的示例代碼,它總是說「未來」實際上並不奏效。 – Talon 2012-02-20 22:12:00
這裏有一個MySQL的解決方案可能是什麼樣子:
SELECT date_field, IF (DATEDIFF(NOW(), date_field) < 1, IF (TIMEDIFF(NOW(), date_field) < '01:00:00', CONCAT(MINUTE(TIMEDIFF(NOW(), date_field)), ' minutes'), CONCAT(HOUR(TIMEDIFF(NOW(), date_field)), ' hours')), date_field) AS occurred
FROM table
我建議你看一看的Zend框架'Zend_Date'解析日期,並根據您的區域設置和其他要求對其進行格式化。 – Vitamin 2012-02-20 21:25:18
嘿,那不是很難編碼。 [這裏是一個例子](http://dev-tips.com/featured/creating-a-relative-time-function)只需要雙手工作。 – 2012-02-20 21:30:23
如果在數據庫服務器和您的Web服務器之間進行比較,在出於任何原因您的時鐘不準確時,我會小心謹慎。就我個人而言,我總是會和like一樣比較,所以我會比較數據庫服務器的datetime和數據庫服務器的NOW(),以確保使用相同的時鐘。 – 2012-02-20 21:33:12