直接从我的框架human_time_diff()
涉及缓存。
/**
* Time since an entry was posted
*
* Adapted from binary bonsai
* @link http://binarybonsai.com/code/timesince.txt
* @license unknown - original source unavailable
*
* @todo check human_time_diff(); as a replacement
* @link http://codex.wordpress.org/Function_Reference/human_time_diff
* Note: Rarst said there\'s caching involved with this fn.
*
* @param (integer) $older_date
* @param (integer) $newer_date
*/
function get_time_since( $older_date, $newer_date = false )
{
// array of time period chunks
$chunks = array(
array( 60 * 60 * 24 * 365 , \'year\' )
,array( 60 * 60 * 24 * 30 , \'month\' )
,array( 60 * 60 * 24 * 7, \'week\' )
,array( 60 * 60 * 24 , \'day\' )
,array( 60 * 60 , \'hour\' )
,array( 60 , \'min\' )
);
// $newer_date will equal false if we want to know the time elapsed between a date and the current time
// $newer_date will have a value if we want to work out time elapsed between two known dates
if ( $newer_date == false )
{
$newer_date = time() + ( 60 * 60 * get_option( \'gmt_offset\' ) );
}
else
{
$newer_date = $newer_date;
}
// difference in seconds
$since = $newer_date - $older_date;
// we only want to output two chunks of time here, eg:
// x years, xx months
// x days, xx hours
// so there\'s only two bits of calculation below:
// step one: the first chunk
for ( $i = 0, $j = count( $chunks ); $i < $j; $i++ )
{
$seconds = $chunks[$i][0];
$name = $chunks[$i][1];
// finding the biggest chunk (if the chunk fits, break)
if ( ( $count = floor( $since / $seconds ) ) != 0 )
{
break;
}
}
// set output var
if ( $count == true )
{
$output = "1 {$name2}";
}
else
{
$output = "{$count} {$name}s";
}
// step two: the second chunk
if ( $i + 1 < $j )
{
$seconds2 = $chunks[$i + 1][0];
$name2 = $chunks[$i + 1][1];
if ( ( $count2 = floor( ( $since - ( $seconds * $count ) ) / $seconds2 ) ) != 0 )
{
// add to output var
if ( $count2 == true )
{
$output .= ", 1 {$name2}";
}
else
{
$output .= ", {$count} {$name2}s";
}
}
}
return $output;
}