[英]Using strtotime with TimeZone
我有个问题。 我想将此DateTime: 2018-10-28 02:00:00
转换为TimeStamp。 现在我正在寻找的时间戳是: 1540684800
,但是使用我的代码,我得到了这个时间戳: 1540688400
。 我知道它与我的TimeZone有关,但是我不知道该如何解决。 我住在阿姆斯特丹的荷兰。 这是我的代码:
$LoopDateTime = "2018-10-28 02:00:00";
$search_key = (strtotime($LoopDateTime)*1000);
有人能帮我吗?
阿姆斯特丹的时区标识符是Europe/Amsterdam
而1540688400
是正确的时间戳。 肯定有一个在线工具可以检查,但您也可以从PHP本身进行验证:
$date = new DateTime("@1540688400");
$date->setDateTimeZone(new DateTimeZone('Europe/Amsterdam'));
echo $date->format('r'); // Sun, 28 Oct 2018 02:00:00 +0100
但是,您的代码并不健壮,因为取决于配置的时区。 您可以通过多种方式对其进行显式设置,例如:
$LoopDateTime = "2018-10-28 02:00:00";
$search_key = strtotime($LoopDateTime . ' Europe/Amsterdam') * 1000;
var_dump($search_key); // int(1540688400000)
要么:
date_default_timezone_set('Europe/Amsterdam');
$LoopDateTime = "2018-10-28 02:00:00";
$search_key = strtotime($LoopDateTime) * 1000;
var_dump($search_key); // int(1540688400000)
附注:如果我没记错的话,那么大多数欧洲刚刚从CEST(+0200)切换到CET(+0100)的确切时间就是2018年10月28日 (星期日)02:00:00 +0100 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.