Почему strtotime возвращает один и тот же результат для разных часовых поясов

Я работаю с php и mysql для разработки своего приложения. Для этого приложения время играет важную роль, поскольку я хочу показывать данные своим пользователям в соответствии с выбранным ими часовым поясом. Для этого я использую strtotime для преобразования времени в числовую форму, но я только что заметил, что strtotime возвращает одинаковое значение для всех часовых поясов. Я написал следующий код для тестирования.

date_default_timezone_set("Asia/Kolkata");
echo date("Y-m-d H:i:s")." ------ ";
echo strtotime(date("Y-m-d H:i:s"))."<br/><br/>";
date_default_timezone_set("America/New_York");
echo date("Y-m-d H:i:s")." ------ ";
echo strtotime(date("Y-m-d H:i:s"));

Но выход

2013-01-28 15:40:11 ------ 1359367811

2013-01-28 05:10:11 ------ 1359367811

Почему возвращаемое значение идентично?


person Abhimanyu Sharma    schedule 28.01.2013    source источник
comment
За исключением того, что временные метки Unix всегда имеют формат UTC.   -  person Bobby    schedule 28.01.2013
comment
Вручную укажите разницу во времени в вашей функции, чтобы получить метки времени, такие как strtotime(time_format -0700));   -  person Deadlock    schedule 28.01.2013


Ответы (3)



Как говорится в комментарии @Bobby, «Временные метки Unix всегда UTC». Это означает, что вы, по сути, делаете два эквивалентных преобразования в часовой пояс UTC.

Учтите, что временная метка t1 в часовом поясе1 и та же самая t1< Отметка времени /sub> в 2 даст тот же результат при преобразовании в часовой пояс a3. В вашем примере "тот же результат" в секундах, но принцип тот же.

Другими словами, в вашем коде вы генерируете две временные метки UNIX, казалось бы, из двух разных дат. Но на самом деле вы создаете два разных, но эквивалентных представления (азиатский и американский часовые пояса) для одного и того же момента времени. Затем вы преобразуете два эквивалентных представления в одно и то же третье представление (часовой пояс UTC).

person Boaz - CorporateShillExchange    schedule 28.01.2013

Согласно руководству PHP для strtotime,

The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.

Как указано выше, strtotime преобразует заданный формат даты в отметку времени Unix, которая рассчитывается относительно эпохи Unix. Эпоха — это фиксированная точка, определение которой не зависит от часового пояса пользователя, а количество секунд, прошедших с тех пор, относительно одинаково во всех часовых поясах.

Установка часового пояса просто влияет на интерпретацию значения метки времени.

person Jenson Jose    schedule 14.08.2013