gmmktime - один выходной день после конвертации с функцией date () - PullRequest
0 голосов
/ 07 февраля 2012

У меня странная проблема при попытке сделать дату из некоторого пользовательского ввода, используя gmmktime (). Кажется, моя дата всегда показывается как один день позади, когда я конвертирую ее в дату для вывода. У меня есть выбор даты, и я конвертирую дату, используя ввод из выпадающего списка месяца, года и дня.

В моем коде у меня есть:

$inputDate = gmmktime(0,0,0,02,07,2012,0);
$inputDate = date("M d Y", $inputDate);

Когда это выводится, показанная дата будет 06 февраля 2012 года вместо 07 февраля 2012 года. Однако если я изменю gmmktime () на просто mktime (), дата будет правильной и будет отображаться как седьмое.

Может кто-нибудь объяснить, почему это происходит и что мне нужно сделать, чтобы использовать gmmktime () и чтобы мои даты отображались в правильном формате? Спасибо!

1 Ответ

1 голос
/ 07 февраля 2012

gmmktime() предполагает, что введенная дата / время является временем по Гринвичу, и автоматически преобразует его в время сервера, используя настройку date.timezone в php.ini.В моей системе +0500 по Гринвичу я получаю:

<?php
$inputDate = gmmktime(0, 0, 0, 2, 7, 2012);
echo date("M d Y H:i:s O", $inputDate);
// Feb 07 2012 05:00:00 +0500

Обратите внимание, что я передал 0, 0, 0 как время функции, но в итоге получил 05:00:00.В вашем случае кажется, что ваш сервер отстает GMT, поэтому для каждой даты, которую вы создаете с помощью этой функции, будет конвертировано в -nnnn часов после указанной даты;для 00:00 по Гринвичу в качестве ввода это фактически означает, что вы получите предыдущую дату.

Обходной путь прост, используйте функцию gmdate() для отображения дат, созданных с помощью gmmktime():

<?php
$inputDate = gmmktime(0,0,0,2,7,2012);
echo gmdate("M d Y H:i:s O", $inputDate);
// Feb 07 2012 00:00:00 +0000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...