Использование strtotime с TimeZone - PullRequest
0 голосов
/ 06 июля 2019

У меня проблема.Я хочу преобразовать этот DateTime: 2018-10-28 02:00:00 в метку времени.Теперь временная метка, которую я ищу: 1540684800, но с моим кодом я получаю эту метку времени: 1540688400.Я знаю, что это как-то связано с моей TimeZone, но я не знаю, как мне это исправить.Я живу в Нидерландах в Амстердаме.Вот мой код:

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

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 07 июля 2019

Амстердамский идентификатор часового пояса: 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)

PS Если я не ошибаюсь Воскресенье, 28 октября 2018 г. 02:00:00 + 0100 - точный момент, когда большинство стран Европы только что перешли с CEST (+0200) на CET (+0100) .

...