PHP: относительная дата и более чистый вчерашний день & Амп; «позавчера»

Я изменил скрипт, чтобы получить относительную дату из временной отметки (x раз назад), и я хотел бы настроить ее, чтобы добавить еще один уровень точности, такой как «вчера» или «позавчера».

Пробовал это, и это работает, но это не очень чисто, у вас есть идея, как я могу упростить две строки после «Последние дни»?

function relativedate($timestamp, $limit = 1209600){
$diff = time() - $timestamp;
$time = ($diff < 1) ? 1 : $diff;
$times = array(
"year"   => 31536000,
"month"  => 2592000,
"week"   => 604800,
"day"    => 86400,
"hour"   => 3600,
"minute" => 60,
"second" => 1
);

// Date limit as displayed full
if ($limit > 0 && $diff > $limit){
return "on ".date("d/m/Y - H:i:s", $timestamp);
}

// Recent days
if ($diff > $times["day"]       && $diff < ($times["day"] * 2)-1) return "yesterday";
if ($diff > ($times["day"] * 2) && $diff < ($times["day"] * 3)-1) return "the day before yesterday";

// Display x time ago
foreach ($times as $unit => $seconds){
if ($time < $seconds) continue;
$amount = floor($time / $seconds);
return "since $amount $unit".(($amount > 1) ? "s" : "");
}
}

РЕДАКТИРОВАТЬ:
И мое редактирование, и ответ работают, но они все еще не так чисты? Попытка выяснить, как я могу сделать это по-другому … Любое предложение приветствуется 🙂
Думал о strtotime("yesterday") а также strtotime("-2 days")?

1

Решение

Попробуй это:

function relativedate($timestamp, $limit = 1209600){
$diff = time() - $timestamp;
$time = ($diff < 1) ? 1 : $diff;
$value = '';
$times = array(
31536000 => "year",
2592000 => "month",
604800 => "week",
86400 => "day",
3600 => "hour",
60 => "minute",
1 => "second");
// Date limit as displayed full
if ($limit > 0 && $diff > $limit){
return "on ".date("d/m/Y - H:i:s", $timestamp);
}
// Recent days
if ($diff >= (24*60*60) && $diff < (48*60*60)) {
$value = "yesterday";
}
if ($diff >= (48*60*60) && $diff < (72*60*60)) {
$value = "the day before yesterday";
}
// Display x time ago
foreach ($times as $seconds => $text){
if ($time < $seconds) continue;
$amount = floor($time / $seconds);
$value = "since $amount $text".(($amount > 1 && $text != "mois") ? "s" : "");
break;
}
return $value;
}

echo relativedate(strtotime("-1 hour")).'<br />';
echo relativedate(strtotime("-23 hour")).'<br />';
echo relativedate(strtotime("-25 hour")).'<br />';
echo relativedate(strtotime("-49 hour")).'<br />';
echo relativedate(strtotime("-73 hour")).'<br />';
echo relativedate(strtotime("-1173 hour")).'<br />';

Результат:

since 1 hour
since 23 hours
since 1 day
since 2 days
since 3 days
on 22/09/2015 - 21:47:59
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]