Я знаю, что этот вопрос задавался 2-3 раза раньше, и я использую функцию, которую нашел в одном из ответов (проверьте это здесь) из этих вопросов, но, похоже, у меня это не работает, я спросил там в комментариях, но не получить любой ответ, поэтому я открываю новый вопрос здесь. Ниже приведен код для получения даты/времени в виде простого текста из даты и времени (тип mysql).
function getElapsedTime($time_stamp)
{
$ts = convert_datetime($time_stamp);
$time_stamp = $ts;
$time_difference = strtotime('now') - $time_stamp;
if ($time_difference >= 60 * 60 * 24 * 365.242199)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year');
}
elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month');
}
elseif ($time_difference >= 60 * 60 * 24 * 7)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week');
}
elseif ($time_difference >= 60 * 60 * 24)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24, 'day');
}
elseif ($time_difference >= 60 * 60)
{
return get_time_ago_string($time_stamp, 60 * 60, 'hour');
}
elseif($time_difference <= 60)
{
return get_time_ago_string($time_stamp, 60, 'minute');
}
}
function get_time_ago_string($time_stamp, $divisor, $time_unit)
{
$time_difference = strtotime("now") - $time_stamp;
$time_units = floor($time_difference / $divisor);
settype($time_units, 'string');
if ($time_units === '0')
{
return 'less than 1 ' . $time_unit . ' ago';
}
elseif ($time_units === '1')
{
return '1 ' . $time_unit . ' ago';
}
else
{
return $time_units . ' ' . $time_unit . 's ago';
}
}
function convert_datetime($str) {
list($date, $time) = explode(' ', $str);
list($year, $month, $day) = explode('-', $date);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
return $timestamp;
}
Я добавил еще одну функцию convert_datetime(), которая превращает дату и время mysql в отметку времени, так как я думал, что функция getElapsedTime() ожидает отметку времени, потому что, когда я передавал обычную дату и время (формат mysql), она не работала. Итак, теперь я передаю mysql datetime в getElapsedTime() и преобразовываю его в метку времени с помощью функции convert_datetime() и использую ее для получения строки.
Но когда ожидается, что дата вернется в течение «минуты» или «секунды», она вернется в отрицательном значении. например, его возвращение "-182 минуты назад" для "2013-05-23 15:59:58"..
Кто-нибудь знает, как это сделать?