簡體   English   中英

修改日期時間功能以顯示正確的間隔

[英]Modify Datetime function to show right interval

我檢查了,這不是重復的。 我有這個功能

$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網站上沒有找到能做到這一點的函數。 是否有一個,或者我必須自己創建一個? 謝謝!

DateTime::diff返回一個DateInterval實例,其實例包括其他字段:

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

這是我想出的:

<?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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM