#php #strtotime
#php #strtotime
Вопрос:
<?php
echo date("Y-m-d H:i:s", 0);
?>
//Результат: 1970-01-01 08:00:00
Мой вопрос: второй параметр функции date равен 0, он должен быть 1970-01-01 00:00:00. Почему это 1970-01-01 08:00:00?
Я установил конфигурацию в php.ini
[Дата]
date.timezone=Asia/Ho_Chi_Minh
//Asia/Ho_Chi_Minh: UTC 7 (GMT 7)
Пожалуйста, помогите мне.
Комментарии:
1. Добро пожаловать в Stackoverflow! Лучше думать об этом сообществе, как вы делаете для Википедии. Пользователи приходят сюда с конкретным вопросом, ища конкретный ответ. Пожалуйста, отредактируйте заголовок вашего сообщения, чтобы будущие пользователи могли его просмотреть, текущий заголовок не содержит описания и является неоднозначным. Я надеюсь, что вы хорошо проведете здесь время!
2. Правильно ли указано время при вводе
echo date("Y-m-d H:i:s")
? Похоже, что время сервера неверно
Ответ №1:
Из вики:
Эпоха Unix — это время 00:00:00 UTC 1 января 1970 года
Как вы видите, начало начинается с часового пояса UTC. Это означает, что это было 8:00
, Asia/Ho_Chi_Minh
когда началась эпоха Unix.
Если вам нужно получить 0:00
, вы должны установить отрицательный второй параметр
date_default_timezone_set('Asia/Ho_Chi_Minh'); // Set UTC timezone
echo date("Y-m-d H:i:s", -(8 * 60 * 60));
Ответ №2:
Установите дату php и часовой пояс по умолчанию, если вы хотите установить текущее время:
date_default_timezone_set('Asia/Ho_Chi_Minh');
echo date("Y-m-d H:i:s");
вам не нужен второй параметр.
Ответ №3:
date() всегда показывает местное время. Это для тебя, Азия / Ho_Chi_Minh. Функция gmdate() используется для отображения времени UTC / GMT.
echo gmdate("Y-m-d H:i:s", 0);
//Result: 1970-01-01 00:00:00
Вы также можете использовать DateTime. Если DateTime создается из метки времени, внутренним часовым поясом всегда является UTC.
$dateTime = new DateTime('@0');
echo $dateTime->format("Y-m-d H:i:s");
//Result: 1970-01-01 00:00:00
Вам не нужно менять часовой пояс по умолчанию ни для одного из вариантов.