@VoRoN1999

Как правильно получить дату?

Всем привет.

Я отправляю post запросом дату в формате: Thu Oct 01 2020 00:00:00 GMT+0400 (+04)
Вывожу $_POST приходит: 2020-09-30T20:00:00.000Z

Форматы меня устраивают, но проблема в том, что всегда вычитается 1 день на сервере.
Если я отправлю 12.10.2020, то придет 11.10.2020. Как я могу это исправить?
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
@mletov

Я отправляю post запросом дату в формате: Thu Oct 01 2020 00:00:00 GMT+0400 (+04)
Вывожу $_POST приходит: 2020-09-30T20:00:00.000Z
Форматы меня устраивают, но проблема в том, что всегда вычитается 1 день на сервере.


В данном случае не 1 день, а 4 часа, посмотрите внимательно на время.

Сказывается разница в часовых поясах между сервером и клиентом
Условно говоря, человек из Тбилиси с часовым поясом GMT+0400 (+04) отправляет данные на сервер с часовым поясом Дублина GMT+000 (+0). И по дублинскому времени это будет на 4 часа меньше. Но по факту это будет одно и то же время.

Вы можете перед записью в базу сравнивать часовой пояс клиента и сервера, вычислять разницу и сохранять дату в часовом поясе сервера (или в любом другом понравившемся, но тогда разницу надо вычислять относительно него). В данном случае эта разница - 4 часа. Но учтите: у всех клиентов разные часовые пояса и, следовательно, разница будет разной.

Введите в гугле "convert datetime from one timezone to another php"

2020-09-30T20:00:00.000Z - это формат ISO 8601

Если конвертнуть 2020-09-30T20:00:00.000Z в дату, то будет 2020-09-30T23:00:00+03:00 (по Москве) или 2020-10-01T00:00:00+04:00 (по Тбилиси)

Поиграйтесь с конвертером
https://dencode.com/en/date/iso8601
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы