2010-01-13 107 views

回答

0

PHP不具有一个内置函数来为你做它,所以你必须通过做手工。该功能将获得天,小时,分钟,秒的差异,在格式返回“X天/小时/分/秒”:

<?php 
function GetTimeDiff($timestamp) { 
    $how_log_ago = ''; 
    $seconds = time() - $timestamp; 
    $minutes = (int)($seconds/60); 
    $hours = (int)($minutes/60); 
    $days = (int)($hours/24); 
    if ($days >= 1) { 
     $how_log_ago = $days . ' day' . ($days != 1 ? 's' : ''); 
    } else if ($hours >= 1) { 
     $how_log_ago = $hours . ' hour' . ($hours != 1 ? 's' : ''); 
    } else if ($minutes >= 1) { 
     $how_log_ago = $minutes . ' minute' . ($minutes != 1 ? 's' : ''); 
    } else { 
     $how_log_ago = $seconds . ' second' . ($seconds != 1 ? 's' : ''); 
    } 
    return $how_log_ago; 
?> 
2

如果这是一个网站,你可能会考虑Timeago。否则,该算法非常简单。喜欢的东西:

$diff = $date - $now; 
if ($diff > 2 * ONE_YEAR) 
    return sprintf("%d years", round($diff/ONE_YEAR)); 
else if ($diff > ONE_YEAR) 
    return "1 year"; 
else if ($diff > 2 * ONE_MONTH) 
    return sprintf("%d months", round($diff/ONE_MONTH)); 
...etc... 
3

试试这个:

function toFriendlyTime($seconds) { 
    $measures = array(
    'day'=>24*60*60, 
    'hour'=>60*60, 
    'minute'=>60, 
    'second'=>1, 
    ); 
    foreach ($measures as $label=>$amount) { 
    if ($seconds >= $amount) { 
     $howMany = floor($seconds/$amount); 
     return $howMany." ".$label.($howMany > 1 ? "s" : ""); 
    } 
    } 
    return "now"; 
} 

正如你所看到的,它也是灵活添加/删除的时间的措施,你认为合适。请务必将这些措施从大到小排列。测试:

now 
1 second 
2 seconds 
1 minute 
1 hour 
1 day 

print(       
    toFriendlyTime(0)."\n"   
    .toFriendlyTime(1)."\n"   
    .toFriendlyTime(2)."\n"   
    .toFriendlyTime(60)."\n"   
    .toFriendlyTime(3600)."\n" 
    .toFriendlyTime(24*3600)."\n"            
    ); 

在结果

相关问题