PHP: считать прошедшие часы / дни - PullRequest
0 голосов
/ 21 мая 2019

У меня есть метка времени в этом формате: 2019-05-21 19:57:21 Теперь я хочу отобразить часы / дни, прошедшие с этой метки времени.

Например, когда отметка времени старше 2 минут, я хочу напечатать 2 minutes, пока она не достигнет 59 minutes.

Из сведений об этом должны быть часы.Так, например, после 59 hours это должно быть 1 hour.

После достижения 24 hours, оно должно сказать 1 day, 2 days.Через неделю должно появиться 1 week (мы выпустим годы).

Это то, что я сделал сам.Я не знаю, как мне это сделать:

$timestamp = '2019-05-21 19:57:21';

function calculate_notification_time( $notification_time ) {

    $now  = new DateTime( date( 'Y-m-d H:i:s' ) );
    $past = new DateTime( $notification_time );
    $dt   = $now->diff( $past );

    error_log( print_r( $now, true ) );

    if ( $dt->y > 0 ) {
        $number = $dt->y;
        $unit   = 'Jahr';
    } else if ( $dt->m > 0 ) {
        $number = $dt->m;
        $unit   = 'Monat';
    } else if ( $dt->d > 0 ) {
        $number = $dt->d;
        $unit   = 'Tag';
    } else if ( $dt->h > 0 ) {
        $number = $dt->h;
        $unit   = 'Stunde';
    } else if ( $dt->i > 0 ) {
        $number = $dt->i;
        $unit   = 'Minute';
    } else if ( $dt->s > 0 ) {
        $number = $dt->s;
        $unit   = 'einigen Sekunden';
    }

    if ( ! empty( $unit ) && ! empty( $number ) && $number > 1 ) {

        switch ( $unit ) {
            case 'Jahr':
                $unit .= 'en';
                break;
            case 'Monat':
                $unit .= 'en';
                break;
            case 'Tag':
                $unit .= 'en';
                break;
            case 'Stunde':
                $unit .= 'n';
                break;
            case 'Minute':
                $unit .= 'n';
                break;
            default:
                break;
        }

        return $number . ' ' . $unit;
    }

    return 'Zeit nicht Verfügbar';
}

ОБНОВЛЕНИЕ:

С помощью ответа я понял это.Странно то, что минуты совершенно неверны и идут назад.Так 20 минут назад было 35 минут, а теперь 15 минут.Так странно ....

1 Ответ

0 голосов
/ 21 мая 2019
$timestamp = '2019-05-21 11:49:21';
$unixTimestampS = strtotime($timestamp);
$dNow =  strtotime("now");
$diff = $dNow- $unixTimestampS;
if($diff <60) {
    $result =  $diff. ' seconds ago'; // When it's not 1 minute
} elseif (($dNow- $unixTimestampS) > 60 && ($dNow- $unixTimestampS) < 3600) {
    $result = $diff . ' minute ago'; // For example: 19 minutes
}
echo $result;

или лучший подход упоминается здесь Как получить разницу во времени в минутах в PHP

...