Php “相对日期和清洁剂”;“昨天”&&引用;“前天”;

Php “相对日期和清洁剂”;“昨天”&&引用;“前天”;,php,date,relative-date,Php,Date,Relative Date,我修改了一个脚本,从一个时间戳(x倍前)中获取一个相对日期,我想对它进行调整,以添加另一个精度级别,如“昨天”或“前天” 试过这个,效果很好,但不是很干净,你有没有办法在“最近几天”之后简化这两行 function relativedate($timestamp,$limit=1209600){ $diff=time()-$timestamp; $time=($diff31536000, “月”=>2592000, “周”=>604800, “日”=>86400, “小时”=>3600, “分钟

我修改了一个脚本,从一个时间戳(x倍前)中获取一个相对日期,我想对它进行调整,以添加另一个精度级别,如“昨天”或“前天”

试过这个,效果很好,但不是很干净,你有没有办法在“最近几天”之后简化这两行

function relativedate($timestamp,$limit=1209600){
$diff=time()-$timestamp;
$time=($diff<1)?1:$diff;
$times=数组(
“年”=>31536000,
“月”=>2592000,
“周”=>604800,
“日”=>86400,
“小时”=>3600,
“分钟”=>60,
“秒”=>1
);
//显示的日期限制已满
如果($limit>0&$diff>limit){
返回“on.”日期(“d/m/Y-H:i:s”,$timestamp);
}
//最近几天
如果($diff>$times[“day”]&&$diff<($times[“day”]*2)-1)返回“昨天”;
如果($diff>($times[“day”]*2)和($diff<($times[“day”]*3)-1)返回“前天”;
//显示x时间之前
foreach($单位的次数=>$秒){
如果($时间<$秒)继续;
$amount=地板($time/$seconds);
返回“自$amount$unit.”(($amount>1)?“s”:“);
}
}
我的编辑和回复都可以,但还是不干净?试着找出我可以用另一种方式做这件事

虽然大约是《标准时间》(“昨天”)和《标准时间》(“-2天”)?

试试这个:

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 />';

为什么不使用?@Kyslik这只是我网站上的一个小功能,不需要一个完整的库!重新发明轮子是不对的:)这是我的观点。我认为您的问题在于
$diff
变量可以是正的,也可以是负的;因此,从中减去会给你带来问题。你试过调试吗;(
var\u dump($diff)
ing)?@Kyslik编辑了这个问题,现在开始工作,但不是很清楚:/我不明白你想要什么。请再解释一点。我已经试过了,但这总是会让我“昨天”,即使只有一两个小时。在这里效果很好。在函数调用中传递$timestamp变量时,请检查该变量的值。哈,对不起,我的错,问题是该值是否超过一天或两天。返回“昨天”。好的,尝试更新的答案。现在似乎很好用。
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