Вы можете проанализировать этот формат с небольшим изменением используемой строки формата:
$string = "20181011000000GMT+0800";
Carbon::createFromFormat('YmdHisT+', $string);
Знак +
указывает синтаксическому анализатору игнорировать все после первого идентификатора часового пояса ( GMT ). Строго говоря, он будет работать и без +
, но я предпочитаю использовать его для ясности. Впрочем, до вас.
См. https://3v4l.org/kDorn
На самом деле, тестируя это немного больше, я не уверен, что знак плюса так важен. Я думаю, что любой из символов формата часового пояса (T
и O
) просто поглощает всю информацию о часовом поясе, а не только их конкретные части. Парсер DateTime иногда может быть чем-то вроде минного поля.