我有以下类型的字符串:
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。但是我认为你可以自己找出正确的格式。