2015-12-21 168 views
0

来自API的日期值是“2015-12-16T22:14:26-0700”现在我需要将日期转换为“2015-12-16 22:14:26”而不使用DateTime对象。为了做到这一点,我试图匹配最后的时区-0700,并尝试将日期分成 “2015-12-16”,“22:14:26”,“-0700” 下面的代码返回一个数组。请让我知道我在这里做错了什么。如何在PHP中分隔日期,时间和时区?

同我必须做,如果日期是在

“二○一五年十二月一十七日07:00:00 ETC/GMT”未来这种格式也是如此。

preg_match("/.*?([-+]d+)$/", "2015-12-16T22:14:26-0700", $timeZone); 
print_r($timeZone); 
+0

@MarcB,OP,'preg_match'中的第三个参数:'$ timeZone' –

+0

我猜应该正确启动RTFScreen ... –

+0

“不使用DateTime对象” - 为什么这个约束? – Gordon

回答

1

这应该拆分你的字符串。

preg_match("/(\d{4}-\d{1,2}-\d{1,2})T(\d{1,2}:\d{1,2}:\d{1,2})(-?\d{4})/", "2015-12-16T22:14:26-0700", $timeZone); 

输出:

Array 
(
    [0] => 2015-12-16T22:14:26-0700 
    [1] => 2015-12-16 
    [2] => 22:14:26 
    [3] => -0700 
) 

PHP演示:https://eval.in/488702

Regex101演示(和解释):https://regex101.com/r/yJ0lV5/1

您当前的正则表达式将只捕获区偏移;如果您的数字元字符已更正为包含反斜杠,则正如d+允许多个d一样。你的正则表达式的功能演示,https://regex101.com/r/yJ0lV5/2

+0

它工作完美。感谢您解释我的正则表达式问题 – Krishna

0

正则表达式模式:

获取日期:

/[0-9]{4}-[0-9]{2}-[0-9]{2}[a-zA-Z]{1}/ 

获取时间:

/[0-9]{2}:[0-9]{2}:[0-9]{2}-[0-9]*/ 

不知道这是否是你想要的,但它得到的日期和时间分开