将欧洲日期转换为UNIX,同时考虑时区和夏令时


Convert European date to UNIX while factoring in timezone and summer time?

我有一组过去事件的日期,格式如下:

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;