为了账号安全,请及时绑定邮箱和手机立即绑定

PHP:从时间戳生成相对日期/时间

PHP:从时间戳生成相对日期/时间

PHP
aluckdog 2019-07-27 10:21:23
PHP:从时间戳生成相对日期/时间我基本上试图将Unix时间戳(time()函数)转换为兼容过去和未来日期的相对日期/时间。所以产出可能是:2个星期前1小时60分钟前15分54秒前10分15秒后首先我尝试编写这个代码,但是创建了一个巨大的无法维护的功能,然后我在互联网上搜索了几个小时,但我能找到的只是一部分时间的脚本(呃:“1小时前”没有纪要)。你有一个已经这样做的脚本吗?
查看完整描述

9 回答

?
慕工程1480053

TA贡献3条经验 获得超0个赞

666

查看完整回答
反对 回复 2021-03-18
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

此功能为您提供“1小时前”或“明天”之类的“现在”和“特定时间戳”之间的结果。

function time2str($ts){
    if(!ctype_digit($ts))
        $ts = strtotime($ts);

    $diff = time() - $ts;
    if($diff == 0)
        return 'now';
    elseif($diff > 0)
    {
        $day_diff = floor($diff / 86400);
        if($day_diff == 0)
        {
            if($diff < 60) return 'just now';
            if($diff < 120) return '1 minute ago';
            if($diff < 3600) return floor($diff / 60) . ' minutes ago';
            if($diff < 7200) return '1 hour ago';
            if($diff < 86400) return floor($diff / 3600) . ' hours ago';
        }
        if($day_diff == 1) return 'Yesterday';
        if($day_diff < 7) return $day_diff . ' days ago';
        if($day_diff < 31) return ceil($day_diff / 7) . ' weeks ago';
        if($day_diff < 60) return 'last month';
        return date('F Y', $ts);
    }
    else
    {
        $diff = abs($diff);
        $day_diff = floor($diff / 86400);
        if($day_diff == 0)
        {
            if($diff < 120) return 'in a minute';
            if($diff < 3600) return 'in ' . floor($diff / 60) . ' minutes';
            if($diff < 7200) return 'in an hour';
            if($diff < 86400) return 'in ' . floor($diff / 3600) . ' hours';
        }
        if($day_diff == 1) return 'Tomorrow';
        if($day_diff < 4) return date('l', $ts);
        if($day_diff < 7 + (7 - date('w'))) return 'next week';
        if(ceil($day_diff / 7) < 4) return 'in ' . ceil($day_diff / 7) . ' weeks';
        if(date('n', $ts) == date('n') + 1) return 'next month';
        return date('F Y', $ts);
    }}


查看完整回答
反对 回复 2019-07-27
?
心有法竹

TA贡献1866条经验 获得超5个赞

function relativeTime($time) {

    $d[0] = array(1,"second");
    $d[1] = array(60,"minute");
    $d[2] = array(3600,"hour");
    $d[3] = array(86400,"day");
    $d[4] = array(604800,"week");
    $d[5] = array(2592000,"month");
    $d[6] = array(31104000,"year");

    $w = array();

    $return = "";
    $now = time();
    $diff = ($now-$time);
    $secondsLeft = $diff;

    for($i=6;$i>-1;$i--)
    {
         $w[$i] = intval($secondsLeft/$d[$i][0]);
         $secondsLeft -= ($w[$i]*$d[$i][0]);
         if($w[$i]!=0)
         {
            $return.= abs($w[$i]) . " " . $d[$i][1] . (($w[$i]>1)?'s':'') ." ";
         }

    }

    $return .= ($diff>0)?"ago":"left";
    return $return;}

用法:

echo relativeTime((time()-256));4 minutes 16 seconds ago


查看完整回答
反对 回复 2019-07-27
  • 9 回答
  • 0 关注
  • 655 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信