2009-06-25 148 views
6

我想在PHP中使用日期做一點數學運算。我正在修改一個留言框,並且我想要實現以下功能。PHP日期問題


如果發佈日期=今天,返回後

其他時間,如果日期=昨日,回報 「昨天」

其他日期= X天前


將如何我使用php的日期函數來計算多少天前時間戳記(時間戳在UNIX時間格式化)

回答

8

試試這個:

$shoutDate = date('Y-m-d', $shoutTime); 
if ($shoutDate == date('Y-m-d')) 
    return date('H:i', $shoutTime); 

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')))) 
    return 'yesterday'; 

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago'; 
+0

完美。謝謝一堆 – 2009-06-25 14:11:10

3

在php 5.3.0或更高版本中,您可以使用DateTime::diff(又名date_diff())。

在幾乎任何PHP中,您可以將日期轉換爲Unix時間戳,並將它們之間的差異除以86400(以秒爲單位)。

+0

不要忘了,PHP 5.3還沒有出來(如2009年6月) – Greg 2009-06-25 14:08:20

0

使用DateTime類,然後你有一個方法diff

0

嘗試使用date_parse。
從手冊:

<?php 
print_r(date_parse("2006-12-12 10:00:00.5")); 
?> 

將打印

Array 
(
    [year] => 2006 
    [month] => 12 
    [day] => 12 
    [hour] => 10 
    [minute] => 0 
    [second] => 0 
    [fraction] => 0.5 
    [warning_count] => 0 
    [warnings] => Array() 
    [error_count] => 0 
    [errors] => Array() 
    [is_localtime] => 
) 
3

使用的事實,時間存儲在幾秒鐘:

$days = floor(($shoutTime - time())/86400) + 1; // 86400 = 24*60*60 

switch ($days) { 
    case 0: 
    return date('H:i', $shoutTime); 
    case -1: 
    return 'yesterday'; 
    case 1: 
    return 'tomorrow'; 
} 

return "$days ago"; 
1

我不認爲這是有人指出你可以使用strtotime得到「昨天」。它比「手工」計算日期更容易理解(並且更易於記憶),並且可能也不太容易出錯。

$ int = strtotime('Yesterday');


if(date('Y-m-d', $shoutTime) == date('Y-m-d') { 
    return date('H:i:s', $shouTime); 
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) { 
    return "Yesterday."; 
} else { 
    $days = floor($shoutTime - time()/86400); 
    return "$days ago."; 
}