簡體   English   中英

計算PHP中兩個日期之間的差異

[英]Calculates difference between two dates in PHP

您好,我有一對夫婦在我的MySQL數據庫服務器的帖子,每個帖子的內容信息的一個格式為日期時間日期和時間(例2010-11-26 21點55分09秒)在發表的時候。

因此,我想從具有函數NOW()的SQL服務器中檢索實際日期和時間,並計算發布信息的秒數或分鍾數或小時數或天數。

我不知道如何創建這個PHP腳本,但我知道肯定已經完成,所以感謝任何幫助。

你可以使用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時間戳(傳遞時間)中傳遞它,並返回各種字符串。

通常,您在查詢中執行此類操作,但MySQL對於間隔不是很好(使用PostgreSQL會很容易)。 您可以將其轉換為unix時間戳,然后它將給出兩個日期之間的秒數:

SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(your_datetime_column);

我想過DATEDIFF,但它只返回兩個日期之間的數。

例如,您可以使用DateTime類在PHP中執行此操作:

$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查詢相同的東西。

正如billythekid所說,如果您使用的是PHP5.3 +,則可以使用date_diff()函數,如果不是,則可以使用各種方法。 如其他海報所示。 如果你想知道分成“hours:mins:secs”層次結構的時間,那么MySQL中最快的方法就是使用TIMEDIFF()函數

SELECT TIMEDIFF(NOW(), '2010-11-26 12:00:00');

如果你想要它作為秒,使用MySQL或PHP中的unix時間戳功能,你可以使用strtotime()快速將MySQL日期轉換為PHP。

SQL Query中可以提供一個簡單的解決方案:

SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(post_date) AS seconds_ago FROM posts

這里的文檔: MySQL Ref

我實際上需要自己在PHP中這樣做,而billythekid的帖子是正確的方向它不足。 我已經最小化了代碼,但應該清楚第二個參數是來自具有DATETIME列類型的數據庫。

<?php
$interval = date_diff(date_create(date('Y-m-d H:i:s')), date_create($row1['date']));
echo $interval->format('%R%a days');

//Database: 2019-02-22
//PHP's date: 2018-07-07
//Result: +306 days
?>

提醒一下顯而易見:如果需要整數substr($interval->format('%R%a days'),1)你也可以使用substr($interval->format('%R%a days'),1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM