Фактическая спецификация ISO8601 включает часовой пояс.Если это не указано в строке, принимающий сервер сделает предположение, что, вероятно, это неверно.Поэтому решение состоит в том, чтобы включить часовой пояс в строку даты.
$preferred_timezone = new DateTimeZone('America/Vancouver');
$t = new DateTime('now', $preferred_timezone);
var_dump(
$t->format('c'),
$t->format(DateTime::ISO8601),
$t->format('Y-m-d H:i:sP')
);
Вывод:
string(25) "2019-01-21T16:39:08-08:00"
string(24) "2019-01-21T16:39:08-0800"
string(25) "2019-01-21 16:39:08-08:00"
Если принимающая сторона не может правильно обрабатывать часовой пояс и имеет значение только притворившись ISO8601- ish , вам нужно настроить приложение на знание того, что ожидает удаленный сервер, и соответственно выполнить перевод.
$preferred_timezone = new DateTimeZone('America/Vancouver');
$remote_timezone = new DateTimeZone('Europe/Paris');
$t = new DateTime('now', $preferred_timezone);
$t->setTimeZone($remote_timezone);
var_dump(
$t->format('Y-m-d H:i:s')
);
Вывод:
string(19) "2019-01-22 01:42:54"