【问题标题】:PHP: Showing How Long Ago A File Was ModifiedPHP:显示文件多久前被修改
【发布时间】:2015-12-04 23:40:09
【问题描述】:

我正在使用以下代码来显示文件上次修改的时间

echo gmdate("d\d H\h i\m s\s", time()-filemtime(FILENAME));

这将导致类似00d 00h 15m 28s 的内容显示文件上次修改时间是 15m 前。

如果它只是零,我试图限制我可以显示多少时间。 IE。而不是00d 00h 15m 28s,我希望它只显示15m 28s

有没有简单的方法来做到这一点?

【问题讨论】:

  • 只需将时间转换为常规时间
  • 我会使用\DateTime() tho,更易于管理,而且代码看起来不像 1998 年。

标签: php time


【解决方案1】:

我认为您可以使用DateTime 并使用setTimestamp 方法从filemtime 设置时间戳。

例如:

<?php
$dateTime = new DateTime();
$dateTimeFile = new DateTime();
$dateTimeFile->setTimestamp(filemtime(FILENAME));
$interval = $dateTime->diff($dateTimeFile);
echo rtrim(
    sprintf(
        "%s%s%s%s",
        $interval->d > 0 ? $interval->d . "d " : "",
        $interval->h > 0 ? $interval->h . "h " : "",
        $interval->i > 0 ? $interval->i . "m " : "",
        $interval->s > 0 ? $interval->s . "s " : ""
    )
);

【讨论】:

  • 我喜欢这个解决方案,因为它易于理解并且不需要算术和一堆 if 语句
【解决方案2】:

这不是你真正想要的......

我目前正在使用这个:

define('MINUTE_IN_SECONDS', 60);
define('HOUR_IN_SECONDS', 60 * MINUTE_IN_SECONDS);
define('DAY_IN_SECONDS', 24 * HOUR_IN_SECONDS);
define('WEEK_IN_SECONDS', 7 * DAY_IN_SECONDS);
define('YEAR_IN_SECONDS', 365 * DAY_IN_SECONDS);

function humanTimeDifference($from, $to = '') {
    if ( empty( $to ) )
        $to = time();
    $diff = (int) abs( $to - $from );
    if ( $diff < HOUR_IN_SECONDS ) {
        $mins = round( $diff / MINUTE_IN_SECONDS );
        if ( $mins <= 1 )
            $mins = 1;
        $since = sprintf( _n( '%s minute', '%s minutes', $mins ), $mins );
    } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
        $hours = round( $diff / HOUR_IN_SECONDS );
        if ( $hours <= 1 )
            $hours = 1;
        $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
    } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
        $days = round( $diff / DAY_IN_SECONDS );
        if ( $days <= 1 )
            $days = 1;
        $since = sprintf( _n( '%s day', '%s days', $days ), $days );
    } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
        $weeks = round( $diff / WEEK_IN_SECONDS );
        if ( $weeks <= 1 )
            $weeks = 1;
        $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks );
    } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) {
        $months = round( $diff / ( 30 * DAY_IN_SECONDS ) );
        if ( $months <= 1 )
            $months = 1;
        $since = sprintf( _n( '%s month', '%s months', $months ), $months );
    } elseif ( $diff >= YEAR_IN_SECONDS ) {
        $years = round( $diff / YEAR_IN_SECONDS );
        if ( $years <= 1 )
            $years = 1;
        $since = sprintf( _n( '%s year', '%s years', $years ), $years );
    }
    return $since;
}

function _n($single, $plural, $number) {
    if($number > 1) {
        return $plural;
    } else {
        return $single;
    }
}

我刚刚从我的GitHub project 那里拿走了它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2014-04-25
    相关资源
    最近更新 更多