Строка T23:59:59+01:00
означает, что время здесь равно 23:59:59, а здесь составляет +1 час от UTC.
Это какесли вы звоните своему другу и говорите, что «время здесь равно 23:59, а мы GMT + 1».
Если вы передаете строку времени в PHPкак новый объект DateTime:
$string = "T23:59:59+01:00";
$dt = new DateTime("@".strtotime($string));
var_dump($dt);
PHP возьмет это время и переведет его на местное время сервера (в моем случае UTC + 0) и включит часовой пояс:
object(DateTime)#1 (3) {
["date"]=>
string(26) "2019-03-06 22:59:59.000000"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}
Я могу изменить часовой пояс объекта datetime:
$timezone = new DateTimeZone('EST');
$dt->setTimezone($timezone);
var_dump($dt);
Затем PHP отобразит время в новом часовом поясе и снова включит часовой пояс:
object(DateTime)#1 (3) {
["date"]=>
string(26) "2019-03-06 17:59:59.000000"
["timezone_type"]=>
int(2)
["timezone"]=>
string(3) "EST"
}