Я запустил следующий код в качестве теста:
<?php
$timestamp = "2017-09-01T10:00:05+00:00";
$date = DateTime::createFromFormat('Y-m-d\TH:i:s T', $timestamp);
$date->setTimeZone(new DateTimeZone("Australia/Sydney"));
$newTimestamp = $date->format('m/d/Y h:i:s A');
echo "<div style='font-family: monospace;'>\r\n";
var_dump($timestamp, $date, $newTimestamp);
echo "</div>\r\n";
?>
Работал, как и ожидалось, без ошибок. Вывод:
string(25) "2017-09-01T10:00:05+00:00"
object(DateTime)#1 (3) {
["date"]=> string(26) "2017-09-01 20:00:05.000000"
["timezone_type"]=> int(3)
["timezone"]=> string(16) "Australia/Sydney"
}
string(22) "09/01/2017 08:00:05 PM"
Я бы подтвердил, что вы получаете правильные данные в результате вашего GET.
ОБНОВЛЕНИЕ
Ваша строка закодирован Вы ожидали, что строка будет:
2017-09-01T10:00:05+00:00
Это не так, поскольку браузер кодирует много потенциально опасных символов, на самом деле:
2017-09-01T10%3A00%3A05%2B00%3A00
Попробуйте это:
$timestamp = urldecode($_GET['statusDatetime']);
Я проверял это:
<?php
$timestamp = urldecode("2017-09-01T10%3A00%3A05%2B00%3A00");
$date = DateTime::createFromFormat('Y-m-d\TH:i:s T', $timestamp);
$date->setTimeZone(new DateTimeZone("Australia/Sydney"));
$newTimestamp = $date->format('m/d/Y h:i:s A');
echo "<div style='font-family: monospace;'>\r\n";
var_dump($timestamp, $date, $newTimestamp);
echo "</div>\r\n";
?>
Сценарий выполнен правильно. Подробнее: HTML Ссылка на кодировку URL