2

チェックしましたが、これは重複ではありません。私はこの機能を持っています

$since = date('Y-m-d H:i:s', strtotime($since));        
        $date = new DateTime($since);
        $interval = $date->diff(new DateTime('now'));
        return $interval->format('%y years, %m months, %d days, %h hours and %i minutos ago %s seconds ago');

でももちろん、「5年2ヶ月5日……」のような日付になります。

私が取得したいのは、間隔のほんの一部です。つまり、「0年、0か月、0日」は取得したくないのですが、「3分」や「5日」などとしましょう。

私はDateTimeを初めて使用しますが、php.netサイトでそれを実行する関数が見つかりませんでした。あるのですか、それとも自分で作成する必要がありますか?ありがとう!

4

2 に答える 2

0

DateTime::diffDateInterval他のフィールドの中にあるインスタンスを返します。

public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;

必要なものを選ぶだけです。たとえば$interval -> h、何時間も。

ここで編集すると、ラッパーがあります。

function formatInterval(DateInterval $interval)
{

    static $values = array(
        'y' => 'years',
        'm' => 'months',
        'd' => 'days',
        'h' => 'hours',
        'i' => 'minutes',
        's' => 'seconds',                                   
    );

    $formatString = "";

    foreach($values as $key => $label)
    {

        if(($value = $interval -> {$key}) === 0)
            continue;

        $formatString .= sprintf('%s %s ', $value, $label);

    }

    return  $formatString;

}

$date = new DateTime;
$interval = $date -> diff( new DateTime('2012-09-7'));

echo formatInterval($interval);

プリントアウト:

20 hours 47 minutes 13 seconds
于 2012-09-07T20:37:23.573 に答える
0

これは私が思いついたものです:

<?php

/**
 * Return formatted interval where only the largest unit gets displayes.
 * @param DateInterval $interval
 *
 * @return string
 */
function format_properly(DateInterval $interval) {
    if ($interval->y !== 0) {
        return $interval->format("%y years");
    }
    if ($interval->m !== 0) {
        return $interval->format("%m months");
    }
    if ($interval->d !== 0) {
        return $interval->format("%d days");
    }
    if ($interval->h !== 0) {
        return $interval->format("%h hours");
    }
    if ($interval->i !== 0) {
        return $interval->format("%i minutes");
    }
    if ($interval->s !== 0) {
        return $interval->format("%s seconds");
    }
    return "0 seconds";
}

$date = new DateTime("now");
$date->sub(new DateInterval("PT2H5M")); //Now - 2 hours and 5 minutes

$now = new DateTime("now");

$interval = $date->diff($now);

echo format_properly($interval);
var_dump($interval);
于 2012-09-07T20:45:13.193 に答える