mktime() не корректно считает время

Не могу понять, почему функция

echo mktime(0, 0, 0, 1, 1, 1970);

возвращает значение "-10800" (ошибка в 3 часа), хотя должна возвращать 0 секунд. Ответа нигде найти не могу, подскажите, в чём может быть проблема?


Ответы (1 шт):

Автор решения: Kostya

Функция mktime() возвращает Unix timestamp, то есть количество секунд, прошедших с полуночи 1 января 1970 года до указанной даты и времени. В вашем случае вы указываете час, минуту и секунду равными 0, то есть указываете, что нужно посчитать секунды от полуночи 1 января 1970 до полуночи 1 января 1970. Таким образом, функция должна вернуть 0 секунд.

Однако функция mktime() возвращает значение -10800, что соответствует 3 часам в секундах. Это может быть связано с тем, что сервер, на котором вы выполняете эту функцию, находится в таймзоне, отличной от UTC (координированного мирового времени). В этом случае функция mktime() учитывает разницу между таймзоной сервера и UTC и возвращает корректное значение Unix timestamp для указанной даты и времени в таймзоне сервера.

Чтобы исправить эту проблему и получить 0 секунд в качестве результата работы функции mktime(), вы можете указать таймзону UTC в качестве параметра для функции date_default_timezone_set(), чтобы указать, что все даты и время, указываемые в скрипте, должны быть в таймзоне UTC. Например:

date_default_timezone_set('UTC');
echo mktime(0, 0, 0, 1, 1, 1970);

Таким образом, функция mktime() будет возвращать 0 секунд, так как указанная дата и время соответствуют полуночи 1 января 1970 в таймзоне UTC.

Однако следует отметить, что функция mktime() может возвращать отрицательные значения, если указанная дата и время раньше 1 января 1970 в таймзоне UTC. Например, результатом работы функции mktime(0, 0, 0, 1, 1, 1969) будет отрицательное число, соответствующее количеству секунд, прошедших с полуночи 1 янва

→ Ссылка