0

タイムスタンプから時間経過を取得する機能があります。インターネットからどこかで取得し、開発および最適化しました。それは完全に機能しています。ここでの問題は、(過去のタイムスタンプから) 時間前のみを取得し、将来のタイムスタンプを処理しなかったことです (0 秒前に返されます)。この機能を関数に追加するのを手伝ってくれる人はいますか?

<?php

function time_ago( $ts, $format ) {

    // $format = 'l, F d, Y H:i';

    $granularity    = 1;

    $dif            = time() - $ts;

    if ( $dif < 0 )

        return '0 Seconds ago';

    elseif ( $dif < 604800 ) { // 604800 7 days / 864000 10 days

        $periods = array(

            'Week'      => 604800,
            'Day'       => 86400,
            'Hour'      => 3600,
            'Minute'    => 60,
            'Second'    => 1

        );

        $output = '';

        foreach ( $periods as $key => $value ) {

            if ( $dif >= $value ) {

                $time = round( $dif / $value );

                $dif %= $value;

                $output .= ( $output ? ' ' : '' ) . $time . ' ';

                $output .= ( ( $time > 1 ) ? $key . 's' : $key );

                $granularity --;

            }

            if ( $granularity == 0 )

                break;

        } // foreach( $periods as $key => $value )

        return ($output ? $output : '0 seconds') . ' ago';

    } else

        return date( $format, $ts );

}

?>

4

2 に答える 2

1

関数を編集しました。未来の時間を として表示するようになりましたIn 10 Hours

コード:

function time_ago( $ts, $format ) {

    // $format = 'l, F d, Y H:i';
    $granularity    = 1;
    $dif            = time() - $ts;
    $future = $dif < 0 ? true : false;
    $dif = abs($dif);
    if ( $dif < 604800 ) { // 604800 7 days / 864000 10 days
        $periods = array(
            'Week'      => 604800,
            'Day'       => 86400,
            'Hour'      => 3600,
            'Minute'    => 60,
            'Second'    => 1
        );
        $output = '';
        foreach ( $periods as $key => $value ) {
            if ( $dif >= $value ) {
                $time = round( $dif / $value );
                $dif %= $value;
                $output .= ( $output ? ' ' : '' ) . $time . ' ';
                $output .= ( ( $time > 1 ) ? $key . 's' : $key );
                $granularity --;
            }
            if ( $granularity == 0 )
            break;
        } // foreach( $periods as $key => $value )
        if($future) {
            return "In " . ($output ? $output : '0 seconds');
        } else {
            return ($output ? $output : '0 seconds') . ' ago';
        }
    } else
    return date( $format, $ts );
}
于 2015-05-18T13:20:00.470 に答える