#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 часов дня является исключением).