В PHP, как получить дату UTC для календарей, которые включают Day Light Savings (DLS) - PullRequest
0 голосов
/ 08 июня 2019

Я не уверен, что функция gmdate() в PHP фиксирует реальность Day Light Savings в мире.Например, этот код:

<?php 

echo "<pre>";

echo "Current timezone: ", date_default_timezone_get(), "\n"; 
$future_date = 'Nov 03, 2019  03:30 PM EDT';
$future_UTC  = gmdate('M d, Y  h:i A T', strtotime($future_date));

echo "
New York Date: $future_date 
GMT/UTC time:  $future_UTC
"; 

?>

Распечатывает это:

Current timezone: UTC

  New York Date: Nov 03, 2019  03:30 PM EDT 
  GMT/UTC time:  Nov 03, 2019  07:30 PM GMT

Это технически неверно, потому что 3 ноября в 2 часа дня DLS переключится и время в GMT / UTCна самом деле будет 08: 30 PM вместо ошибочного 07: 30 PM , который показывает PHP (на основе сегодняшнего DLS).

Есть ли способ автоматически получить правильное время для будущих дат?

1 Ответ

3 голосов
/ 08 июня 2019

Здесь много ошибок, начиная с заголовка вашего вопроса:

как получить дату UTC для календарей, включающих DLS,

UTC четко определен и не имеет летнего времени.Если вы находитесь в другом часовом поясе и в месте с летним временем, то вы больше не в UTC.Итак, вопрос бессмысленный для начала.

$future_date = 'Nov 03, 2019  03:30 PM EDT';

EDT означает «восточное дневное время», поэтому в этом случае вы вводите определенную интерпретацию независимо от даты.Вы заметите, что если вы измените его на EST (восточное стандартное время), вы получите другой результат.

Возможно, вы захотите America/New_York вместо EDT.См. Также: https://www.php.net/manual/en/timezones.php

Это технически неверно, поскольку 3 ноября в 2 часа дня DLS переключится

Нет.2:00 AM.

Есть ли способ автоматически получить правильное время для будущих дат?

Прекратить подачу поврежденных данных PHP и неоднозначно отформатированных дат.У нас есть стандарты даты / времени, например, ISO8601.Дата / время - сложная вещь.Компьютеры не могут читать мысли и не знают, что вы намеревались, когда вы указали неправильную дату для определенного типа часового пояса с переходом на летнее время.

...