有效的方法将“ddmmyyyyThhmm”字符串解析为可行的日期字符串

时间:2011-08-17 08:27:23

标签: php parsing datetime

我有以下类型的字符串:

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()不是一种选择。

3 个答案:

答案 0 :(得分:4)

它只是重新排列一个字符串。

$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 :(得分:1)

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

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

也不是太糟糕,但我希望尽可能清楚地使用命名变量,这样这个小例程的作用就显而易见了。

答案 2 :(得分:-2)

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