嗨,我在MySql數據庫服務器中有幾個帖子,每個帖子中的信息內容之一是格式爲的日期和時間datetime(例如2010-11- 26 21:55:09)發帖時。計算PHP中兩個日期之間的差異
因此,我想用NOW()函數從SQL服務器中檢索實際的日期和時間,並計算在信息發佈後多少秒或幾分鐘或幾小時或幾天。
我不知道如何創建這個PHP腳本,但我知道肯定是已經做好了,所以謝謝你的幫助。
嗨,我在MySql數據庫服務器中有幾個帖子,每個帖子中的信息內容之一是格式爲的日期和時間datetime(例如2010-11- 26 21:55:09)發帖時。計算PHP中兩個日期之間的差異
因此,我想用NOW()函數從SQL服務器中檢索實際的日期和時間,並計算在信息發佈後多少秒或幾分鐘或幾小時或幾天。
我不知道如何創建這個PHP腳本,但我知道肯定是已經做好了,所以謝謝你的幫助。
正如billythekid所說,如果您使用的是PHP5.3 +,那麼您可以使用date_diff()
函數,如果您不是那麼有各種方法。如其他海報所示。 MySQL中最快的方法是,如果您想知道時間分割爲「hours:mins:secs」層次結構,則使用TIMEDIFF() function。
SELECT TIMEDIFF(NOW(), '2010-11-26 12:00:00');
如果你想把它當作秒,使用MySQL或PHP中的Unix時間戳功能,您可以將MySQL的日期,以快速PHP中使用strtotime()
。
您可以使用date_diff()函數
http://php.net/manual/en/function.date-diff.php
喜歡的東西...
<?php
$now = time();
$then = $posttime;
$diff = date_diff($now,$then);
echo $diff->format('%R%d days'); #change format for different timescales
?>
編輯 -
其實我解決我的Twitter的一個這個問題使用此功能的應用程序...
function time_since ($start)
{
$end = time();
$diff = $end - $start;
$days = floor ($diff/86400); //calculate the days
$diff = $diff - ($days*86400); // subtract the days
$hours = floor ($diff/3600); // calculate the hours
$diff = $diff - ($hours*3600); // subtract the hours
$mins = floor ($diff/60); // calculate the minutes
$diff = $diff - ($mins*60); // subtract the mins
$secs = $diff; // what's left is the seconds;
if ($secs!=0)
{
$secs .= " seconds";
if ($secs=="1 seconds") $secs = "1 second";
}
else $secs = '';
if ($mins!=0)
{
$mins .= " mins ";
if ($mins=="1 mins ") $mins = "1 min ";
$secs = '';
}
else $mins = '';
if ($hours!=0)
{
$hours .= " hours ";
if ($hours=="1 hours ") $hours = "1 hour ";
$secs = '';
}
else $hours = '';
if ($days!=0)
{
$days .= " days ";
if ($days=="1 days ") $days = "1 day ";
$mins = '';
$secs = '';
if ($days == "-1 days ") {
$days = $hours = $mins = '';
$secs = "less than 10 seconds";
}
}
else $days = '';
return "$days $hours $mins $secs ago";
}
您將它傳遞給檢查時間的unix時間戳(發佈時間),並返回各種字符串。
一個簡單的解決方案是可行的SQL查詢中:
SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(post_date) AS seconds_ago FROM posts
文檔瀏覽:MySQL Ref
通常情況下,你做這種事情的查詢,但MySQL是不是很好用間隔(使用PostgreSQL會很容易)。你可以將其轉換爲UNIX時間戳,那麼它將給兩個日期之間的秒數:
SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(your_datetime_column);
我想過DATEDIFF,但它只返回天兩個日期之間數。
你可以做到這一點在PHP中,例如,與DateTime類:
$date1 = new DateTime();
$date2 = new Datetime('2010-11-26 12:00:00');
var_dump($date1->diff($date2));
(有做這一個程序的方式,如果你不是OOP的粉絲。)
這絕對是我使用的解決方案如果我不能用RDBMS來完成。 DateTime :: diff返回一個DateInterval對象,其中包含兩個日期之間的秒數,分鐘數,小時數,天數等。
你也可以使用時間戳做在PHP:
$num_sec = time() - strtotime('2010-11-26 12:00:00');
這將返回同樣的事情作爲SQL查詢。
你先生,只是我的一天。我一直需要這樣的一段時間,現在我實際上可以計算兩個時間戳之間的分鐘數,完全在PHP中。如果有人感興趣,或者想讓它更高效,我已經把它變成了GIST:https://gist.github.com/4347159 – 2012-12-20 17:49:44
我不認爲date_diff需要time()作爲輸入。它需要DateTime對象。 所以你需要做一些事情: `$ date1 = date_create(「2013-03-15」);` `$ date2 = date_create(「2013-12-12」);` `$ diff = date_diff($ date1,$ date2);` – 2016-12-19 16:11:56