PHP-Сравнение метки времени Unix до сих пор - PullRequest
1 голос
/ 20 мая 2011

Я получаю метку времени Unix из БД и хочу проверить, прошло ли уже это время.

Я пытался использовать оператор if для сравнения с time(), но он всегда говорит, что времяпрошло уже.

Что я делаю не так?

РЕДАКТИРОВАТЬ: Просто еще немного информации ... чтобы определить am / pm, я добавляю 12 к часу, если его PM перед запуском через mktime ().(Это правильно?)

Он хранится в БД как int, а не как типы даты и времени.

Ответы [ 3 ]

1 голос
/ 20 мая 2011

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

0 голосов
/ 20 мая 2011

Если вы используете mktime для создания метки времени UNIX, PHP использует настройки часового пояса для интерпретации того, что вы подразумеваете под заданными параметрами.Возможно, вы должны использовать gmmktime.Это зависит от того, как создаются временные метки в базе данных;Я не могу сказать наверняка, не увидев больше кода и не имея более подробного объяснения.

Я обычно предпочитаю просто хранить все даты как типы DATETIME в часовом поясе UTC (GMT).Это, как правило, не так запутанно.

Просто еще немного информации ... чтобы определить am / pm, я добавляю 12 к часу, если его PM перед запуском через mktime ().(Это правильно?)

  • 12 часов - 12 часов.
  • 1 вечера - 13 часов.

Так что вы невсегда добавляйте 12. (т. е. 12 часов дня - исключение).

0 голосов
/ 20 мая 2011

Убедитесь, что часовые пояса в БД и PHP совпадают, используйте функцию NOW(), чтобы заполнить столбец БД текущей отметкой времени (столбец должен иметь тип datetime ), затем вы можете получить отметка времени с использованием UNIX_TIMESTAMP() функции MySQL, которая просто сравнивается с PHP time().

В качестве альтернативы, вы можете заполнить столбец DB чем-то вроде

mysql_query("INSERT INTO your_table (your_date) VALUES (FROM_UNIXTIME(" . time() . "))")

Это должно работать даже с несоответствиями часовых поясов.

...