解析“ddmmyyyyThhmm"”的有效方法字符串到可用的日期字符串


Efficient way to parse "ddmmyyyyThhmm" string to workable date string

我有以下类型的字符串:

17082011T1015

也就是:day month year T hours minutes .

解析这些字符串的有效方法是什么?让我以类似mysql的日期结尾:

`2011-08-17 10:15`

(这里不涉及MySQL)

这是为Windows PHP <5.3所以strptime()date_parse_from_format()/DateTime::createFromFormat()不是一个选项

这只是重新排列字符串。

$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;

我想我最终会使用这个解决方案:

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 ];

也不太坏,但是我喜欢尽可能地清晰地使用命名变量,这样这个小例程的作用就很明显了。

如果您使用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。但是我认为你可以自己找出正确的格式。