Merhaba benim veritabanı tarih / zaman içinde bu biçimindedir
2010-06-01T18:20:25+0000
O tarih / saati geçti zaman dışarı yankı istiyorum
örneğin
4 gün 3 saat 36 dakika ve 4 saniye
Bu mümkün mü?
Aşağıda Bunu yapmak için yazdığı bir işlevdir. Bunu kullanmak için çekinmeyin.
/**
* Returns rough (in largest single unit) time elapsed between two times.
* @param int $iTime0 Initial time, as time_t.
* @param int $iTime1 Final time, as time_t. 0=use current time.
* @return string Time elapsed, like "5 minutes" or "3 days" or "1 month".
* You might print "ago" after this return if $iTime1 is now.
* @author Dan Kamins - dos at axonchisel dot net
*/
function ax_getRoughTimeElapsedAsText($iTime0, $iTime1 = 0)
{
if ($iTime1 == 0) { $iTime1 = time(); }
$iTimeElapsed = $iTime1 - $iTime0;
if ($iTimeElapsed < (60)) {
$iNum = intval($iTimeElapsed); $sUnit = "second";
} else if ($iTimeElapsed < (60*60)) {
$iNum = intval($iTimeElapsed / 60); $sUnit = "minute";
} else if ($iTimeElapsed < (24*60*60)) {
$iNum = intval($iTimeElapsed / (60*60)); $sUnit = "hour";
} else if ($iTimeElapsed < (30*24*60*60)) {
$iNum = intval($iTimeElapsed / (24*60*60)); $sUnit = "day";
} else if ($iTimeElapsed < (365*24*60*60)) {
$iNum = intval($iTimeElapsed / (30*24*60*60)); $sUnit = "month";
} else {
$iNum = intval($iTimeElapsed / (365*24*60*60)); $sUnit = "year";
}
return $iNum . " " . $sUnit . (($iNum != 1) ? "s" : "");
}
Bu func kullanmak için, öncelikle ("çağı" beri tamsayı # saniye) time_t formatına kez dönüştürmek gerekiyordu. Bu PHP fonksiyonları ya da muhtemelen bu yardımcı olacaktır: http://php.net/strptime veya http://php.net/strtotime.
Ben bir dakikadan az önce yayınlanmıştır edildiği durumda yukarıdaki kod bir satır değişti.
function ax_getRoughTimeElapsedAsText($iTime0, $iTime1 = 0)
{
if ($iTime1 == 0) { $iTime1 = time(); }
$iTimeElapsed = $iTime1 - $iTime0;
if ($iTimeElapsed < (60)) {
return "Less than a minute ago";
} else if ($iTimeElapsed < (60*60)) {
$iNum = intval($iTimeElapsed / 60); $sUnit = "minute";
} else if ($iTimeElapsed < (24*60*60)) {
$iNum = intval($iTimeElapsed / (60*60)); $sUnit = "hour";
} else if ($iTimeElapsed < (30*24*60*60)) {
$iNum = intval($iTimeElapsed / (24*60*60)); $sUnit = "day";
} else if ($iTimeElapsed < (365*24*60*60)) {
$iNum = intval($iTimeElapsed / (30*24*60*60)); $sUnit = "month";
} else {
$iNum = intval($iTimeElapsed / (365*24*60*60)); $sUnit = "year";
}
return $iNum . " " . $sUnit . (($iNum != 1) ? "s" : "") . " ago";
}
Eğer sağ veritabanında işlev timediff kullanabilirsiniz:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff
şimdi tarih olarak ilk param ve ikinci param geçmek ()
function time_ago($timestamp, $granularity = 2) {
$timestamp = time() - $timestamp;
$units = array('1 year|%d years' => 31536000,
'1 week|%d weeks' => 604800,
'1 day|%d days' => 86400,
'1 hour|%d hours' => 3600,
'1 min|%d mins' => 60,
'1 sec|%d secs' => 1
);
$output = '';
foreach ($units as $key => $value) {
$key = explode('|', $key);
if ($timestamp >= $value) {
$pluralized = floor($timestamp / $value) > 1 ?
sprintf($key[1], floor($timestamp / $value)) :
$key[0];
$output .= ($output ? ' ' : '') . $pluralized;
$timestamp %= $value;
$granularity--;
}
if ($granularity == 0) {
break;
}
}
return $output ? $output : "Just now";
}
Bu yakın olmalıdır.
Edit: added this line: $timestamp = time() - $timestamp;