以以下格式转换英国日期和时间的最佳方法是什么:
30/01/2013 13:30:06
这是PHP 中的d/m/YH:i:s相对时间(即刚刚、几分钟前、30 分钟前、3 小时前、1 天前......等等)。我已经看过几个关于这个主题的教程,但它们都围绕着创建函数而没有任何明确的解释。我希望能在这件事上提供一些帮助。
以以下格式转换英国日期和时间的最佳方法是什么:
30/01/2013 13:30:06
这是PHP 中的d/m/YH:i:s相对时间(即刚刚、几分钟前、30 分钟前、3 小时前、1 天前......等等)。我已经看过几个关于这个主题的教程,但它们都围绕着创建函数而没有任何明确的解释。我希望能在这件事上提供一些帮助。
希望这可以帮助
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>';
}
}
}
使用mktime();
和date();
例如,如果您在格式中有一个特定的时间 d/m/Y H:i:s
,并且您希望它是这样d-m-Y H:s:i
,您可以使用将时间分解为块explode();
,然后使用date(new_format, mktime(current_format_chunks))
编写自定义函数可能会有所帮助。剪切字符串并转换为数字。使用 mktime() 创建时间戳,将其与 time() 当前时间戳进行比较,并通过各种相对时间可能性进行切换(大小写)。
dd/mm/yyyy
需要dd.mm.yyyy
根据格式化规则改成,否则会被当作mm/dd/yyyy
$dateString = '30/01/2013 13:30:06';
$dateObject = new DateTime(str_replace('/', '.', $dateString));
可选添加DateTimezone作为 DateTime 构造函数的第二个参数。
然后你可以用当前日期做一个差异,并使用dateintervals来获取相对时间
解析日期最直接和友好的方法是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 小时”)更容易理解。