datetime — php date_diff / timestamp отключается на 31 минуту

Я сгенерировал метку времени, используя код:

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 )

В чем дело?

1

Решение

Попробуйте установить 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
)
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector