PHP -Сравнение временной метки Unix с текущим моментом

#php #time #compare

#php #время #Сравнить

Вопрос:

Я извлекаю временную метку unix из базы данных и хочу проверить, прошло ли уже это datetime.

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

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

РЕДАКТИРОВАТЬ: Еще немного info..to определите, сколько утра / вечера я добавляю 12 к часу, если это время вечера, прежде чем запускать его через mktime(). (Это правильно?)

Она хранится в БД как int, а не как какие-либо типы datetime.

Комментарии:

1. Попробуйте распечатать временные метки как DB, так и PHP, чтобы визуально увидеть, возможно, DB добавляет микросекунды или не использует GMT. Во-вторых, убедитесь, что и база данных, и сервер приложений PHP имеют одинаковую дату и время, а их внутренние значения времени даты и времени отличаются друг от друга на 1 секунду.

2. Я попробую распечатать оба и сравнить себя. Временная метка в БД была сгенерирована php mktime () и сохранена в БД как «int», поэтому я не думаю, что она может добавить микросекунды. Добавлено больше информации в OP.

Ответ №1:

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

Комментарии:

1. Ну, он запущен на локальном сервере, и я получаю доступ к сайту на сервере, поэтому я сомневаюсь, что часовой пояс отличается, поскольку я использую только один компьютер. Добавлено больше информации в OP.

Ответ №2:

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

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

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

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

Ответ №3:

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

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

Еще немного info..to определите, сколько утра / вечера я добавляю 12 к часу, если это время вечера, прежде чем запускать его через mktime(). (Это правильно?)

  • 12 часов вечера — это 12-й час.
  • 13:00 — это 13-й час.

Таким образом, вы не всегда добавляете 12. (т. е. 12 часов дня является исключением).