我有一组过去事件的日期,格式如下:
year-m-day hour:second
e.g. 2014-05-25 20:41
这些日期基于布鲁塞尔时间(GMT + 1小时+(夏季时间1小时))。
我正试图计算自事件开始以来经过了多少时间,方法是将此日期/时间从当前日期/时间中减去,如下所示:
$current_time = time();
$event_time = date('2014-05-25 20:41');
echo ($current_time - $event_time)
但是,由于时区的原因,日期比Unix时间早两个小时。
是否有一种简单的方法可以准确地从布鲁塞尔夏令时转换到Unix,同时记住每年的夏令时在不同的日期开始?
可以设置时区,使用DateTime::diff()函数和DateInterval::format():
date_default_timezone_set('Europe/Brussels');
$dateNow = new DateTime();
$dateBefore = new DateTime('2014-05-25 20:41') ;
$interval = $dateNow->diff($dateBefore);
echo $interval->format('%h hours %i min ago') . PHP_EOL;
显示:
0 hours 37 min ago
将日期转换为unix时间DateTime::format('U')或DateTime::getTimestamp(),如下所示:
echo $dateNow->format('U') . PHP_EOL
echo $dateNow->getTimestamp() . PHP_EOL;