Время php не дает правильную дату - PullRequest
0 голосов
/ 30 октября 2009

Я хочу получить текущую дату и время в метке времени UNIX, поэтому я делаю некоторые вычисления, но я не получаю правильное время. Дата верна, но время вышло. Я уже установил свой часовой пояс, поэтому я потерян на этом. Может кто-нибудь протянуть руку?

Спасибо.


Вот часть кода, который я использую:

date_default_timezone_set('America/Los_Angeles');
echo time();

Выходы: 1256926663 что равно Пт, 30 октября 2009 18:17:43 GMT.

Это неверно. Что должно быть: пт, 30 октября 2009 10:17:43 PST


ОК, проблема в , а не с отметкой времени, как я и думал. Я использую MySQL для интерпретации метки времени, но это не правильно. Вот что я использую:

FROM_UNIXTIME(timestamp, '%M %D, %Y - %l:%i %p') AS timestamp

Ответы [ 7 ]

5 голосов
/ 30 октября 2009

Похоже, на вашем сервере установлено неверное время.
У PHP нет своих часов.


// редактировать
похоже, правильное время вывода.
функция time () выходы:

количество секунд с начала эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу).

Это означает время по Гринвичу.
Что вам нужно, это date () , который, с другой стороны, выводит местное время / дату.

2 голосов
/ 30 октября 2009

Согласно документации MySQL , есть пара вещей, на которые нужно обратить внимание.

  1. Функции CURRENT_TIMESTAMP (), CURRENT_TIME (), CURRENT_DATE () и FROM_UNIXTIME () возвращают значения в текущем часовом поясе соединения, которое доступно как значение системной переменной time_zone .

    Итак, результаты вашего запроса уже находятся в "местном часовом поясе", где то, что локально, зависит от различных настроек (как для соединения, так и для глобального).

  2. Кроме того, UNIX_TIMESTAMP () предполагает, что его аргумент является значением даты и времени в текущем часовом поясе.

    Смысл этого в том, что когда вы вставляете метку времени в базу данных, вы должны либо вызывать ее без аргумента, либо убедиться, что строка даты и времени, которую вы ей даете, находится в том же часовом поясе, который MySQL рассматривает в качестве своего локального часового пояса для это соединение.

Поскольку похоже, что вы просто хотите извлечь информацию из базы данных, а затем решить, как ее отформатировать в PHP, может быть разумнее просто извлечь неизмененную временную метку из базы данных. Тогда ваш PHP-код сможет обработать его, убедившись, что он отформатирован в соответствии с часовым поясом, который важен для пользователя.

2 голосов
/ 30 октября 2009

time () возвращает метку времени Unix, которая ВСЕГДА gmt и игнорирует любые настройки локали. Используйте функцию date () для форматирования штампа Unix и соблюдения настроек языка.

1 голос
/ 30 октября 2009

Мне кажется правильным:

date_default_timezone_set('UTC');
echo date('r', 1256926663);
// Fri, 30 Oct 2009 18:17:43 +0000

date_default_timezone_set('America/Los_Angeles');
echo date('r', 1256926663);
// Fri, 30 Oct 2009 11:17:43 -0700
0 голосов
/ 30 октября 2009

Рассмотрите возможность проверки вашего демона NTP.

$ /etc/init.d/ntpd stop
$ ntpdate -q pool.ntp.org

# If it's off by much, jump it to the right time:

$ ntpdate pool.ntp.org
$ /etc/init.d/ntpd start

Убедитесь, что он запускается:

chkconfig ntpd --list

Удачи!

0 голосов
/ 30 октября 2009

http://codepad.org/BesoexCf

Возвращает правильное время (для меня это на несколько минут, но это ожидается).

Что вы получите, запустив вышеописанное на своем сервере?

0 голосов
/ 30 октября 2009

Если вы абсолютно уверены, что ваш сервер имеет правильное время, и что вы правильно установили часовой пояс, то с помощью вычета я могу только предположить, что вычисления, которые вы используете для анализа времени, являются неправильными.

Здесь было бы полезно больше подробностей, но мне кажется, что часовой пояс все еще установлен неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...