2012-09-20 41 views
2

好吧,所以我知道如何使用PHP格式化數據庫中的'datetime'值。現在,我想顯示不同時間的帖子的時間,發佈時間不同。在PHP中使用datetime格式

因此,舉例來說,如果現在這一職位的日期之間的時間差:

不到一個小時 - 分鐘的顯示號碼前 多小時也少在24小時 - 小時的顯示數前 24小時或以上,但少於48個小時 - 顯示「昨天」和時間 48小時或更多 - 顯示日期,月份和時間

這裏是我到目前爲止有:

$date = date_create($row['date']); 
$HeaderDate = date_format(date_create($row['date']), 'F j, g:i a'); 
echo $HeaderDate; 

這不測試任何條件,它只是回聲的月,日和時間,不管已經過去的時間長短。

現在,我只是不知道如何計算在我的if語句中使用日期的差異。我怎麼做?但在PHP中,我根本不想使用SQL,除了查詢原始日期。

謝謝

+1

你需要的是使用['DateTime'(http://php.net/manual/ru/class.datetime.php),['日期時間:: DIFF '](http://php.net/manual/ru/datetime.diff.php)和['DateInterval'](http://php.net/manual/ru/class.dateinterval.php)。 – Nemoden

+0

這個比我知道的還要愚蠢... http://stackoverflow.com/questions/2915864/php-how-to-find-the-time-elapsed-since-a-date-time http:// stackoverflow .com/questions/2020517 /計算時間差異在一個php-mysql-javascript-system http://stackoverflow.com/questions/2690504/php-producing-relative-date-time-from-時間戳 – donutdan4114

回答

0

我已經用這個函數以很好的格式顯示時間。希望這會幫助你。

我認爲你必須修改一下才能得到它。正如你希望它顯示兩天後的實際時間。

<?php 
function nicetime($date) 
{ 
    if(empty($date)) { 
     return "No date provided"; 
    } 

    $periods   = array("second", "minute", "hour", "day", "week", "month", "year", "decade"); 
    $lengths   = array("60","60","24","7","4.35","12","10"); 

    $now    = time(); 
    $unix_date   = strtotime($date); 

     // check validity of date 
    if(empty($unix_date)) {  
     return "Bad date"; 
    } 

    // is it future date or past date 
    if($now > $unix_date) {  
     $difference  = $now - $unix_date; 
     $tense   = "ago"; 

    } else { 
     $difference  = $unix_date - $now; 
     $tense   = "from now"; 
    } 

    for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) { 
     $difference /= $lengths[$j]; 
    } 

    $difference = round($difference); 

    if($difference != 1) { 
     $periods[$j].= "s"; 
    } 

    return "$difference $periods[$j] {$tense}"; 
} 

$date = "2012-09-18 17:45"; 
$result = nicetime($date); // 2 days ago 

?> 
0

我會告訴你我使用的功能。你必須修改它,以便擁有你需要的所有案例。你可以看到一個小例子here

function timeToString($ptime) { // $ptime should be timestamp 
    $etime = time() - $ptime; 

    if ($etime <= 30) 
     return 'few seconds ago'; 

    $a = array(
     10 * 12 * 30 * 24 * 60 * 60 => 'decade', 
     12 * 30 * 24 * 60 * 60  => 'year', 
     30 * 24 * 60 * 60   => 'month', 
     7 * 24 * 60 * 60    => 'week', 
     24 * 60 * 60     => 'day', 
     60 * 60      => 'hour', 
     60       => 'minute', 
     1       => 'second' 
     ); 

     foreach ($a as $secs => $str) { 
      $d = $etime/$secs; 
      if ($d >= 1) { 
       $r = floor($d); 
       if($etime > 7 * 24 * 60 * 60) { 
        $ret = 'on %1$s, %2$s%3$s'; 
        return sprintf($ret,date('F', $ptime), date('d', $ptime),(date('Y') != date('Y', $ptime) ? ' ' . date('Y', $ptime) : '')); 
       } 
       $ret = '%d ' . $str . ($r > 1 ? 's' : '') . ' ago'; 

       return sprintf($ret,$r); 
     } 
    } 
} 
+0

[這是你的網站?](http://www.nirojsapkota.com.np/2012/02/get-relative-time-in-php_25.html)?非常相似的功能... – donutdan4114

+0

不,這不是我的網站..但這個功能是從那裏啓發:) –