Ответ 1
Поскольку не было никакой библиотеки, я сделал ее сам и включил ее в PEAR:
Date_HumanDiff, http://pear.php.net/package/Date_HumanDiff
Код находится в http://github.com/pear/Date_HumanDiff
Я ищу PHP библиотеку, которая генерирует удобные для пользователя представления времени - например, "два часа назад", когда метка времени time() - 2 * 3600
.
Есть несколько существующих вопросов с ответами и сообщениями в блоге (1, 2, 3), но все они содержат только фрагменты кода, а не библиотеку, которую я могу установить и обновить.
Django имеет один, Python также имеет автономный lib, Javascript имеет несколько (1, 2, 3) тоже - где находится библиотека PHP?
Библиотека должна иметь следующие вещи:
Поскольку не было никакой библиотеки, я сделал ее сам и включил ее в PEAR:
Date_HumanDiff, http://pear.php.net/package/Date_HumanDiff
Код находится в http://github.com/pear/Date_HumanDiff
Я знаю Kohana, вы можете легко его переносить.
Функция называется fuzzy_span()
.
См. http://kohanaframework.org/3.3/guide-api/Date#fuzzy_span
Класс Kohana Date предоставляет для этого метод fuzzy_span()
. Но он не может ответить вам точные значения, такие как "10 минут"
Попробуйте этот код:
$current_date_time_get_updated_on_date_format = '';
function get_updated_on_date_format($dt_updated, $prefix = 'Updated ', $at = 'at ') {
global $current_date_time_get_updated_on_date_format;
if ($current_date_time_get_updated_on_date_format == '') {
$current_date_time_get_updated_on_date_format = now();
}
$i_second_now = strtotime($current_date_time_get_updated_on_date_format);
$i_second_dt_updated = strtotime($dt_updated);
$i_second_diff = $i_second_now - $i_second_dt_updated;
$s_return_date_format = '';
if ($i_second_diff < 0) {
// Developers Uploading Time, Time Zone Gap Patch
$s_return_date_format = $prefix . $at . date('g:ia \o\n F jS, Y', strtotime($dt_updated));
} else if ($i_second_diff < 60) {
$s_return_date_format = $prefix . $i_second_diff . ' seconds ago ';
} elseif ($i_second_diff < (60 * 60)) {
$s_return_date_format = $prefix . round(($i_second_diff / 60), 0) . ' minitues ago ';
} elseif ($i_second_diff < (60 * 60 * 24)) {
$s_return_date_format = $prefix . round(($i_second_diff / (60 * 60)), 0) . ' hours ago ';
} else {
$s_return_date_format = $prefix . $at . date('g:ia \o\n F jS, Y', strtotime($dt_updated));
}
return $s_return_date_format;
}
function now() {
// it should extract database time in this format 'YYYY-MM-DD HH:MM:SS'
return mysql_now_value;
}