【问题标题】:Using strtotime with TimeZone将 strtotime 与 TimeZone 一起使用
【发布时间】:2019-07-06 13:43:44
【问题描述】:

我有问题。我想将此日期时间:2018-10-28 02:00:00 转换为时间戳。现在我正在寻找的时间戳是:1540684800,但是通过我的代码,我得到了这个时间戳:1540688400。我知道这与我的时区有关,但我不知道如何解决这个问题。 我住在荷兰阿姆斯特丹。 这是我的代码:

$LoopDateTime = "2018-10-28 02:00:00";
$search_key = (strtotime($LoopDateTime)*1000);

有人可以帮我吗?

【问题讨论】:

  • 1540688400 对于阿姆斯特丹时区是正确的。您期待哪个时区?
  • 对不起....我想得到1540684800,但我得到1540688400
  • 再一次,这是阿姆斯特丹的正确时间戳。你的意思是你想得到1540688400,却得到1540684800
  • 是的,我很抱歉!!!!这就是我的意思
  • 我已经删除了我的答案,因为它不相关。试试strtotime('2018-10-28 02:00:00 CEST');

标签: php datetime timestamp


【解决方案1】:

阿姆斯特丹的时区标识符是Europe/Amsterdam1540688400 正确的时间戳。肯定有一个在线工具可以检查,但您也可以从 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)

附:如果我没记错的话2018 年 10 月 28 日星期日 02:00:00 +0100 正是大多数欧洲刚刚从 CEST (+0200) 切换到 的确切时刻>CET (+0100).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多