Зависит ли PHPs функция mktime() от часового пояса?
Я уже знаю, что mktime возвращает количество секунд с начала эпохи (1 января 1970 г., 00:00:00 по Гринвичу), поэтому временные метки основаны на GMT.
У меня есть веб-приложение PHP для школьных ярмарок, и оно написано с использованием Kohana 3.2. Когда ярмарка запланирована, я создаю метку времени, используя mktime, которая хранится в поле "дата" ярмарки. Перед началом ярмарки, если вы попытаетесь просмотреть ее, она автоматически отправит вас на промо-страницу выставки. Если вы попытаетесь просмотреть промо-страницу и ярмарка начнется, вы будете перенаправлены на страницу просмотра. Итак, вы можете видеть, что я делаю две проверки.
Промо-страница использует PHP для хранения метки времени в скрытом поле. Процедура обратного отсчета javascript вызывается с использованием этой временной метки и начинает отсчет оставшегося времени между датой ярмарки и текущим временем (преобразованным в EST). Таймер достигает 0, что означает, что ярмарка началась, страница перенаправляется на страницу просмотра.
Страница просмотра имеет некоторые настройки кода, чтобы проверить, началась ли ярмарка, и выглядит это так:
if( mktime() < $fair->date ) Request::current()->redirect('/fair/promo/' . $id);
Однако, когда вышеуказанный оператор обрабатывается, он перенаправляется обратно на промо-страницу, где таймер сразу же обнуляется и пытается отправить меня обратно на страницу просмотра. Большой бесконечный цикл.
Вот как я получаю время с помощью javascript на промо-странице.
var st = srvTime();
var d = new Date(st);
var now = Math.round( d.getTime() / 1000);
now=now+3600; //adjust to EST
Таким образом, вопрос возвращается к mktime(). Согласно php.net, "аргументы могут быть опущены в порядке справа налево; любые пропущенные аргументы будут установлены на текущее значение в соответствии с локальной датой и временем". Значит ли это, что если я вызываю mktime () на сервере в CST, то количество секунд, прошедших с начала эпохи = CST - эпохи???
1 ответ
Аргументы могут быть опущены в порядке справа налево; любые аргументы, пропущенные таким образом, будут установлены на текущее значение в соответствии с локальной датой и временем.