编写将英国日期转换为相对时间的PHP函数

时间:2013-02-06 09:12:31

标签: php

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

30/01/2013 13:30:06

这是 d / m / YH:i:s 在PHP中的相对时间(即刚才,几分钟前,30分钟前,3小时前,1天前......)等等)。我已经看过几个关于这个主题的教程,但它们都围绕创建函数而没有任何明确的解释。我很感激就此事提供一些帮助。

5 个答案:

答案 0 :(得分:4)

希望这会有所帮助

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>';
            }
        }
    }

答案 1 :(得分:2)

使用mktime();date();

例如,如果您有d/m/Y H:i:s格式的特定时间,并且希望它为d-m-Y H:s:i,则可以使用explode();将时间分解为块,然后使用{{1 }}

答案 2 :(得分:2)

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

答案 3 :(得分:1)

dd/mm/yyyy需要根据formatting rules更改为dd.mm.yyyy,否则会被视为mm/dd/yyyy

$dateString = '30/01/2013 13:30:06';
$dateObject = new DateTime(str_replace('/', '.', $dateString));

可选地添加DateTimezone作为DateTime构造函数的第二个参数。

然后你可以使用当前日期diff,并使用dateintervals获取相对时间

答案 4 :(得分:1)

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

$date   = '30/01/2013 13:30:06';
$format = 'j/m/Y G:i:s';
$time   = DateTime::createFromFormat($format, $date);
echo $time->format('l dS F \'y at H.i.s');

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

要调整日期,您可以使用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小时”)更容易理解。