1

タイムスタンプ (x 回前) から相対的な日付を取得するようにスクリプトを修正しました。「昨日」や「一昨日」などの別のレベルの精度を追加するよう微調整したいと考えています。

これを試してみましたが、あまりきれいではありません。「最近」の後の2行をどのように単純化できるか考えていますか?

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")?_

4

1 に答える 1

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
于 2015-11-10T18:24:30.800 に答える