У меня есть функция, чтобы получить время назад из метки времени, я взял его где-то из Интернета и разработал и оптимизировал его. Это полностью функционирует. Проблема в том, что он ТОЛЬКО получает время назад (из прошлой метки времени), он не обрабатывал будущие метки времени (он возвращает 0 секунд назад).
Кто-нибудь может помочь мне добавить эту функцию в функцию?
<?php
function time_ago( $ts, $format ) {
// $format = 'l, F d, Y H:i';
$granularity = 1;
$dif = time() - $ts;
if ( $dif < 0 )
return '0 Seconds ago';
elseif ( $dif < 604800 ) { // 604800 7 days / 864000 10 days
$periods = array(
'Week' => 604800,
'Day' => 86400,
'Hour' => 3600,
'Minute' => 60,
'Second' => 1
);
$output = '';
foreach ( $periods as $key => $value ) {
if ( $dif >= $value ) {
$time = round( $dif / $value );
$dif %= $value;
$output .= ( $output ? ' ' : '' ) . $time . ' ';
$output .= ( ( $time > 1 ) ? $key . 's' : $key );
$granularity --;
}
if ( $granularity == 0 )
break;
} // foreach( $periods as $key => $value )
return ($output ? $output : '0 seconds') . ' ago';
} else
return date( $format, $ts );
}
?>
Я отредактировал вашу функцию. Теперь он отображает время в будущем, как In 10 Hours
,
Код:
function time_ago( $ts, $format ) {
// $format = 'l, F d, Y H:i';
$granularity = 1;
$dif = time() - $ts;
$future = $dif < 0 ? true : false;
$dif = abs($dif);
if ( $dif < 604800 ) { // 604800 7 days / 864000 10 days
$periods = array(
'Week' => 604800,
'Day' => 86400,
'Hour' => 3600,
'Minute' => 60,
'Second' => 1
);
$output = '';
foreach ( $periods as $key => $value ) {
if ( $dif >= $value ) {
$time = round( $dif / $value );
$dif %= $value;
$output .= ( $output ? ' ' : '' ) . $time . ' ';
$output .= ( ( $time > 1 ) ? $key . 's' : $key );
$granularity --;
}
if ( $granularity == 0 )
break;
} // foreach( $periods as $key => $value )
if($future) {
return "In " . ($output ? $output : '0 seconds');
} else {
return ($output ? $output : '0 seconds') . ' ago';
}
} else
return date( $format, $ts );
}
Это должно работать
<?php
function diffPeriods($diff)
{
$periods = array(
'Week' => 604800,
'Day' => 86400,
'Hour' => 3600,
'Minute' => 60,
'Second' => 1
);
$granularity = 1;
$output = '';
foreach ($periods as $key => $value) {
if ($diff >= $value) {
$time = round($diff / $value);
$diff %= $value;
$output .= ($output ? ' ' : '') . $time . ' ';
$output .= (($time > 1) ? $key . 's' : $key);
$granularity --;
}
if ($granularity == 0) {
break;
}
}
return $output;
}
function time_ago($ts, $format)
{
$diff = time() - $ts;
if ($diff == 0) {
return 'Now';
}
if ($diff < 604800 && $diff > 0) {
// 604800 7 days / 864000 10 days
$periods = array(
'Week' => 604800,
'Day' => 86400,
'Hour' => 3600,
'Minute' => 60,
'Second' => 1
);
$output = diffPeriods($diff);
return ($output ? $output : '0 seconds') . ' ago';
} elseif ($diff < 0 && $diff > - 604800) {
$output = diffPeriods($diff * - 1);
return 'in ' . ($output ? $output : '0 seconds');
}
// too old/new...display the date
return date($format, $ts);
}
var_dump(time_ago(time(), 'l, F d, Y H:i')); // now
var_dump(time_ago(time() + 3600, 'l, F d, Y H:i')); // 1 hour in the future
var_dump(time_ago(time() + (3600 * 50), 'l, F d, Y H:i')); // 2 daysin the future
var_dump(time_ago(time() + (3600 * 24 * 11), 'l, F d, Y H:i')); // 11 days in the future
var_dump(time_ago(time() - 3600, 'l, F d, Y H:i')); // 1 hour ago
var_dump(time_ago(time() - (3600 * 50), 'l, F d, Y H:i')); // 2 days ago
var_dump(time_ago(time() - (3600 * 24 * 11), 'l, F d, Y H:i')); // 11 days ago