Здравствуйте!
есть переменная $action['date'] в ней хранится unix метка 1524168000 (2018-04-19 20:00:00)
Есть функция:
function unixConvert($date) {
$date = date("Y-m-d H:i:s", $date);
return $date;
}
которая возвращает дату в читабельном виде.
К примеру:
echo unixConvert($action['date'])
функция должна вернуть вот такую строку 2018-04-19 20:00:00 а возвращает 2018-04-19 23:00:00, то есть на 3 часа больше.
Подскажите в чем может быть дело?
Когда в Гринвиче 2018-04-19 20:00:00, то во временной зоне +3, соответственно 2018-04-19 23:00:00.
Unix timestamp считается по UTC (зона +0).
Т.е., когда вы передаете в date временную метку Unix, то функция считает, что это время по Гринвичу, а текстовое представление возвращает с учетом временной зоны сервера.
Попробуйте выполнить date("r", $timestamp) и увидите, какая выставлена зона.
В качестве самого простого (и не самого оптимального решения) можно расширить вашу функцию, чтобы принимала разницу в часах и учитывала ее:
function unixConvert($date, $timezone) {
$timeshift = $timezone * 3600;
$date = date("Y-m-d H:i:s", $date + $timeshift);
return $date;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей