Как отделить часовой пояс и дату от строки? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть строка, полученная из имени текстового файла.

$string = "20181011000000GMT+0800"

// trying to convert it 
Carbon::createFromFormat('YmdHisTO', $string)->format...

Это показывает мне эту ошибку.

Найдены неожиданные данные.Часовой пояс не найден в базе данных. Отсутствуют данные.

Как разделить дату и время, если есть конец строки даты и времени по Гринвичу + 0800?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы можете проанализировать этот формат с небольшим изменением используемой строки формата:

$string = "20181011000000GMT+0800";
Carbon::createFromFormat('YmdHisT+', $string);

Знак + указывает синтаксическому анализатору игнорировать все после первого идентификатора часового пояса ( GMT ). Строго говоря, он будет работать и без +, но я предпочитаю использовать его для ясности. Впрочем, до вас.

См. https://3v4l.org/kDorn

На самом деле, тестируя это немного больше, я не уверен, что знак плюса так важен. Я думаю, что любой из символов формата часового пояса (T и O) просто поглощает всю информацию о часовом поясе, а не только их конкретные части. Парсер DateTime иногда может быть чем-то вроде минного поля.

0 голосов
/ 10 сентября 2018

Я бы порекомендовал использовать strtotime () , чтобы он принимал каждый допустимый формат даты и времени. См использование: http://nl1.php.net/manual/en/function.strtotime.php

$DateTimeString = "20181011000000GMT+0800";
$timestamp = strtotime($DateTimeString);
// trying to convert it
Carbon::createFromTimestamp($timestamp)->toDateTimeString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...