Я сгенерировал метку времени, используя код:
date_default_timezone_set("UTC");
$timestamp = date_create("now")->getTimestamp();
echo "value=$timestamp";
Я получаю значение:
1484800385
Я [позже] хочу уловить разницу между этим значением и текущим временем.
$timestamp = "1484800385";
echo " timestamp=$timestamp<hr>";
print_r (new DateTime("@$timestamp"));
echo "<hr>";
print_r (date_create("now",timezone_open("UTC")));
и это выводит даты — но разница во времени больше, чем я ожидаю — на полчаса. Часовые пояса также показаны по-разному.
timestamp=1484800385
DateTime Object ( [date] => 2017-01-19 04:33:05.000000 [timezone_type] => 1 [timezone] => +00:00 )
DateTime Object ( [date] => 2017-01-19 05:08:32.000000 [timezone_type] => 3 [timezone] => UTC )
Я попробовал другой скрипт. Сначала я сгенерировал метку времени:
date_default_timezone_set("Australia/Sydney");
echo date_create("now")->getTimestamp(); // prints 1484800977
Затем я скопировал и вставил показанное значение, посмотрел на него несколько секунд спустя, по сравнению с датой сейчас
date_default_timezone_set("Australia/Sydney");
$date1 = new DateTime();
$date1->setTimestamp($timestamp);
print_r($date1);
$date2 = date_create("now");
print_r($date2);
и все равно не так — на 31 минуту.
DateTime Object ( [date] => 2017-01-19 15:42:57.000000 [timezone_type] => 3 [timezone] => Australia/Sydney )
DateTime Object ( [date] => 2017-01-19 16:22:25.000000 [timezone_type] => 3 [timezone] => Australia/Sydney )
и часовой пояс UTC
$timestamp = 1484801882;
date_default_timezone_set('UTC');
$date1 = new DateTime();
$date1->setTimestamp($timestamp);
$date2 = new DateTime();
print_r($date1);
print_r($date2);
результаты в том же часовом поясе, но текущая дата на 31 минуту раньше, чем я ожидаю.
DateTime Object ( [date] => 2017-01-19 04:58:02.000000 [timezone_type] => 3 [timezone] => UTC )
DateTime Object ( [date] => 2017-01-19 05:33:23.000000 [timezone_type] => 3 [timezone] => UTC )
В чем дело?
Попробуйте установить TimeZone в UTC перед печатью
$UTC = new DateTimeZone("UTC");
$date = new DateTime("now");
$date->setTimezone( $UTC );
print_r ($date);
echo "<hr>";
print_r (date_create("now",timezone_open("UTC")));
Выход
DateTime Object
(
[date] => 2017-01-19 05:17:52.000000
[timezone_type] => 3
[timezone] => UTC
)
>DateTime Object
(
[date] => 2017-01-19 05:17:52.000000
[timezone_type] => 3
[timezone] => UTC
)
Других решений пока нет …