2014-09-04 147 views
0

我想从'YYYY-MM-DD hh:mm:ss格式的字符串中获取日期时间。PHP获取日期时间每个preg_match

要clearify:我是从一个API得到一个字符串,现在字符串看起来是这样的:

{ts '2014-09-02 14:42:49'} 

但字符串可以改变,所以我不会只是缩短字符串只DateTime这就是为什么我想通过RegEx接收它。因为那么字符串可以随意更改,只要日期格式保持不变,我将始终得到正确的结果。

我发现这个question与解决方案,并试图用它来处理我的情况。 正则表达式是这样的:

$regEx = "(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})"; 

我也试过:

$regEx = "(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})"; 

它的工作对regexr.com,但我不能让它在我PHP代码工作。

整个代码是这样的:

 $result = array(); 
     $regEx = "(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})"; 
     preg_match($details['date'], $regEx, $result); 
     var_dump($result); 

var_dump提供了一个空数组。

我该如何定义RegEx,以便它与preg_match一起工作?

+1

哇你为什么要为它写一个正则表达式? http://php.net/manual/en/datetime.createfromformat.php是绰绰有余的 – 2014-09-04 07:42:29

+0

['strtotime()'](http://php.net/strtotime) – Dale 2014-09-04 07:42:31

+0

每当有东西不工作:启用' error_reporting'。 – mario 2014-09-04 07:42:33

回答

3

PHP正则表达式需要,并且preg_match参数的顺序也是错误的。

$regEx = '/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/'; 
preg_match($regEx, $details['date'], $result); 
var_dump($result); 

如果$details['date']只是日期时间格式字符串,你可以考虑使用DateTime类代替。

$datetime = new DateTime($details['date']); 
+0

谢谢你,从未使用过RegEx,纯粹是我的初学者错误。我清除了我的问题,$ details ['date']不仅仅是一个日期时间格式字符串,但它包含一个,这就是为什么我想要RegEx! – KhorneHoly 2014-09-04 07:49:55