编写一个PHP函数,将UK日期转换为相对时间

编写一个PHP函数,将UK日期转换为相对时间,php,Php,以以下格式转换英国日期和时间的最佳方式是: 30/01/2013 13:30:06 这是相对于相对时间的d/m/Y H:i:s(即刚才、几分钟前、30分钟前、3小时前、1天前……等等)。我已经看过一些关于这个主题的教程,但是它们都围绕着创建函数展开,没有任何明确的解释。我希望能在这件事上得到一些帮助。dd/mm/yyyyy需要更改为dd.mm.yyyy,否则将被视为mm/dd/yyyyy $dateString = '30/01/2013 13:30:06'; $dateObject = new

以以下格式转换英国日期和时间的最佳方式是:

30/01/2013 13:30:06


这是相对于相对时间的d/m/Y H:i:s(即刚才、几分钟前、30分钟前、3小时前、1天前……等等)。我已经看过一些关于这个主题的教程,但是它们都围绕着创建函数展开,没有任何明确的解释。我希望能在这件事上得到一些帮助。

dd/mm/yyyyy
需要更改为
dd.mm.yyyy
,否则将被视为
mm/dd/yyyyy

$dateString = '30/01/2013 13:30:06';
$dateObject = new DateTime(str_replace('/', '.', $dateString));
作为DateTime构造函数的第二个参数,可选地添加一个

然后,您可以对当前日期进行一次修改,并使用来获取相对时间

使用
mktime()
日期()

例如,如果您有一个格式为
d/m/Y H:i:s
的特定时间,并且希望它为
d-m-Y H:s:i
,则可以使用
explode()将时间分解为块
然后使用
日期(新的\u格式,mktime(当前的\u格式\u块))

希望这有帮助

function timeSince($ptime){
        $etime = time() - strtotime($ptime);

        if( $etime < 1 ){
            return 'less than 1 second ago';
        }

        $a = array( 12 * 30 * 24 * 60 * 60  =>  'year',
                    30 * 24 * 60 * 60       =>  'month',
                    24 * 60 * 60            =>  'day',
                    60 * 60             =>  'hour',
                    60                  =>  'minute',
                    1                   =>  'second'
        );

        foreach( $a as $secs => $str ){

            $d = $etime / $secs;     
            if( $d >= 1 ){

                $r = round( $d );
                return ' <font style="color:#0099ff"> ' . $r . ' ' . $str . ( $r > 1 ? 's' : '' ) . ' ago</font>';
            }
        }
    }
函数时间自($ptime){
$etime=time()-strottime($ptime);
如果($etime<1){
返回“不到1秒前”;
}
$a=数组(12*30*24*60*60=>“年”,
30*24*60*60=>“月”,
24*60*60=>“天”,
60*60=>“小时”,
60=>“分钟”,
1=>“秒”
);
foreach($a作为$secs=>$str){
$d=$etime/$secs;
如果($d>=1){
$r=四舍五入($d);
返回“..r.”.$str.($r>1?'s':”)。'ago';
}
}
}

编写自定义函数可能会有所帮助。剪切字符串并转换为数字。使用mktime()创建时间戳,将其与time()当前时间戳进行比较,并通过各种相对时间可能性切换(大小写)

解析日期最直接、最友好的方法是扩展。它有一个静态方法,名为:

该方法采用自定义格式和日期字符串。因为您可以自己定义格式,所以比“手动”解析要容易得多

要调整日期,可以使用
add()
sub()
modify()
方法:

$time->add(new DateInterval('P3DT5H')); // 3 days and 5 hours
echo $time->format('l dS F \'y at H.i.s');

$time->sub(new DateInterval('P9DT1H')); // 9 days and 1 hours
echo $time->format('l dS F \'y at H.i.s');

$time->modify('-1 year -35 days');
echo $time->format('l dS F \'y at H.i.s');

正如您所看到的,
modify()
方法稍微更易于使用。另外两个方法使用了
DateInterval
类和一种笨拙的格式。这并不难(只需阅读文档并按照文档中的说明进行操作),但使用实际单词(即“-3天-7小时”)更容易理解。

要澄清,你想让我们写一篇带解释的教程吗?可能是我用datetime的格式29/01/2013 13:20:42尝试过的,但它在44年前就出现了:$ptime=str_replace(“/”,“-”,$ptime);
$time->add(new DateInterval('P3DT5H')); // 3 days and 5 hours
echo $time->format('l dS F \'y at H.i.s');

$time->sub(new DateInterval('P9DT1H')); // 9 days and 1 hours
echo $time->format('l dS F \'y at H.i.s');

$time->modify('-1 year -35 days');
echo $time->format('l dS F \'y at H.i.s');