Я отправляю 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