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

PHP如何查找自日期时间以来经过的时间?

PHP如何查找自日期时间以来经过的时间?

PHP
qq_遁去的一_1 2019-07-05 13:14:16
PHP如何查找自日期时间以来经过的时间?如何查找自日期时间戳(如2010-04-28 17:25:43,最后输出的文本应该是xx Minutes Ago/xx Days Ago
查看完整描述

4 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

大多数答案似乎都集中在将日期从字符串转换为时间。看来你主要是在考虑把约会安排成“5天前”的格式,以此类推。对吗?

我就是这样做的:

$time = strtotime('2010-04-28 17:25:43');echo 'event happened '.humanTiming($time).' ago';function humanTiming ($time){

    $time = time() - $time; // to get the time since that moment
    $time = ($time<1)? 1 : $time;
    $tokens = array (
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    );

    foreach ($tokens as $unit => $text) {
        if ($time < $unit) continue;
        $numberOfUnits = floor($time / $unit);
        return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
    }}

我还没测试过,但应该能用。

结果会是

event happened 4 days ago

event happened 1 minute ago

干杯


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

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

希望共享php函数,这将导致语法上正确的Facebook,就像人类可读的时间格式一样。

例子:

echo get_time_ago(strtotime('now'));

结果:

不到1分钟前

function get_time_ago($time_stamp){
    $time_difference = strtotime('now') - $time_stamp;

    if ($time_difference >= 60 * 60 * 24 * 365.242199)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 365.242199 days/year
         * This means that the time difference is 1 year or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year');
    }
    elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 30.4368499 days/month
         * This means that the time difference is 1 month or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month');
    }
    elseif ($time_difference >= 60 * 60 * 24 * 7)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 7 days/week
         * This means that the time difference is 1 week or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week');
    }
    elseif ($time_difference >= 60 * 60 * 24)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day
         * This means that the time difference is 1 day or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24, 'day');
    }
    elseif ($time_difference >= 60 * 60)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour
         * This means that the time difference is 1 hour or more
         */
        return get_time_ago_string($time_stamp, 60 * 60, 'hour');
    }
    else
    {
        /*
         * 60 seconds/minute
         * This means that the time difference is a matter of minutes
         */
        return get_time_ago_string($time_stamp, 60, 'minute');
    }}function get_time_ago_string($time_stamp, $divisor, $time_unit){
    $time_difference = strtotime("now") - $time_stamp;
    $time_units      = floor($time_difference / $divisor);

    settype($time_units, 'string');

    if ($time_units === '0')
    {
        return 'less than 1 ' . $time_unit . ' ago';
    }
    elseif ($time_units === '1')
    {
        return '1 ' . $time_unit . ' ago';
    }
    else
    {
        /*
         * More than "1" $time_unit. This is the "plural" message.
         */
        // TODO: This pluralizes the time unit, which is done by adding "s" at the end; this will not work for i18n!
        return $time_units . ' ' . $time_unit . 's ago';
    }}


查看完整回答
反对 回复 2019-07-05
?
富国沪深

TA贡献1790条经验 获得超9个赞

我想我应该做你想做的事:

function time2string($timeline) {
    $periods = array('day' => 86400, 'hour' => 3600, 'minute' => 60, 'second' => 1);

    foreach($periods AS $name => $seconds){
        $num = floor($timeline / $seconds);
        $timeline -= ($num * $seconds);
        $ret .= $num.' '.$name.(($num > 1) ? 's' : '').' ';
    }

    return trim($ret);}

只需将其应用于time()strtotime('2010-04-28 17:25:43')因此:

print time2string(time()-strtotime('2010-04-28 17:25:43')).' ago';


查看完整回答
反对 回复 2019-07-05
  • 4 回答
  • 0 关注
  • 603 浏览

添加回答

举报

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