Проблемы с получением возраста в часах - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь вычислить возраст чего-то в часах.

$ data ['record'] - это отметка времени mysql NOW () в поле DATETIME.

$ data ['record'] - 20 минут, когда я это сделаю:

$minutes= date('i',(strtotime("now")-strtotime($data['record'])));

$ minutes возвращает 20 должным образом, однако по какой-то причине, когда я пытаюсь $ $, он возвращает '5'.

$hours = date('g',(strtotime("now")-strtotime($data['record'])));

Это не имеет смысла, так как $ hours должна возвращать 0, поскольку записи менее 60 минут ...

Когда я проверил значение "strtotime (" now ") - strtotime ($ data ['record'])" ", оно равно 980. Помогите!

Ответы [ 3 ]

2 голосов
/ 25 февраля 2011

Пожалуйста, сравните вывод strtotime("now") php и select now(); в sql.Я думаю, здесь спрятана проблема с часовым поясом.

Как вы сказали, strtotime("now")-strtotime($data['record']) возвращает 980, что должно быть в минутах.960 делится на 60 и получается в 16 часов, поэтому 980 - это 16 часов 20 минут - 20 минут - это именно то, что вы ищете.Вам нужно настроить один экземпляр, чтобы использовать время другого - я бы всегда использовал UTC.Если вам нужно отобразить его, проанализируйте его соответствующим образом и выведите местное время.

1 голос
/ 25 февраля 2011

Пожалуйста, смотрите: http://php.net/manual/en/function.date.php

Когда параметр $ format = "g", возвращается значение 1-12.

0 голосов
/ 25 февраля 2011

Date будет работать не совсем так, как вы ожидаете.

Дата занимает отметку времени (количество секунд с начала эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу)),и преобразует это в четкий формат времени.По сути, со значением 980 вы получите первое января в полночь + 980 секунд (примерно 1 января 1970 г. 00:16:20 по Гринвичу. Когда вы конвертируете для разницы часовых поясов (скорее всего, разница около 5 часов)вот как вы получаете пять.

Чтобы это исправить, просто возьмите 980, и разделите на 60, чтобы получить минуты, затем снова разделите на 60, чтобы получить часы, так:

$hours = ((strtotime("now")-strtotime($data['record'])) / 60) / 60;

Там нетнужно для date, так как вам нужно относительное время, а не абсолютное время.

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