Эффективный способ синтаксического анализа строки "ddmmyyyyThhmm" в работоспособную строку даты - PullRequest
1 голос
/ 17 августа 2011

У меня есть следующие типы строк:

17082011T1015

Другими словами: day month year T hours minutes.

Каким будет эффективный способ анализа этих строк таким образом, чтобы я заканчивал что-то вроде даты, подобной MySQL:

`2011-08-17 10:15`

(Кстати, MySQL здесь не задействован)

Это для Windows PHP <5.3, поэтому <code>strptime() и date_parse_from_format() / DateTime::createFromFormat() НЕ являются опцией.

Ответы [ 3 ]

4 голосов
/ 17 августа 2011

Это просто перестановка строки.

$date = "17082011T1015";

$day = substr($date, 0, 2);
$month = substr($date, 2, 2);
$year = substr($date, 4, 4);
$hour = substr($date, 9, 2);
$minute = substr($date, 11, 2);

echo $year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute;
1 голос
/ 17 августа 2011

Я думаю, что в конечном итоге я воспользуюсь этим решением:

sscanf( '17082011T1015', '%02s%02s%04sT%02s%02s', $day, $month, $year, $hours, $minutes );
$datetime = $year . '-' . $month . '-' . $day . ' ' . $hours . ':' . $minutes;

Прежде чем задавать вопрос, я не осознавал, что могу использовать дополнительные аргументы для sscanf() в свою пользу, и подумал, что будуприходится прибегать к чему-то вроде этого:

$parsed = sscanf( '17082011T1015', '%02s%02s%04sT%02s%02s' );
$datetime = $parsed[ 2 ] . '-' . $parsed[ 1 ] . '-' . $parsed[ 0 ] . ' ' . $parsed[ 3 ] . ':' . $parsed[ 4 ];

Не так уж и плохо, но мне нравится быть достаточно ясным с именованными переменными, чтобы было очевидно, что делает эта маленькая подпрограмма.

0 голосов
/ 17 августа 2011

Если вы используете PHP> = 5.3.0, вы можете использовать DateTime :: createFromTimeFormat для создания обычного DateTime объекта из этой строки.

Должно быть что-то вроде:

$str = "17082011T1015";
$date = DateTime::createFromFormat($str,'DDMMYYYYThhII');
echo $date->format("Y-m-d H:i:s");

Не могу проверить это здесь, только PHP 5.2.Но я думаю, что вы могли бы придумать правильный формат самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...