Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 修改Datetime函数以显示正确的间隔_Php_Date_Datetime - Fatal编程技术网

Php 修改Datetime函数以显示正确的间隔

Php 修改Datetime函数以显示正确的间隔,php,date,datetime,Php,Date,Datetime,我查过了,这不是重复的。我有这个功能 $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

我查过了,这不是重复的。我有这个功能

$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
返回一个实例,其字段包括:

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

DateTime::diff
返回一个实例,其字段包括:

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

这就是我想到的:

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

不知道这样一个函数。你必须自己写。为什么要用date()和strotime()?只需添加$since作为DateTime($since)参数……不知道这样一个函数。你必须自己写。为什么要用date()和strotime()?只需添加$since作为DateTime($since)参数…只需围绕值编写一个简单的包装器-我会为此进行编辑。只需围绕值编写一个简单的包装器-我会为此进行编辑。