我的XML Web服务正在数组的datetime参数中发送额外的空间。在4月1日之前,格式即将结束:
Sun Mar 31 02:05:49 2012 GMT
...但截至4月1日,它被重新格式化为:
Sun Apr 1 02:05:49 2012 GMT (Note the extra space between "Apr" and "1")
问题是我用空白空间(" "
)爆炸我的数组来取 [月] + [日期] + [年] 但是现在我得到< EM> [月] + [空白] + [时间戳] 。
是否有向后计数的数组函数,所以我得到 [timezone] [year] [timestamp] [date] 等。
感谢。
答案 0 :(得分:1)
您可以使用正则表达式进行拆分
$array = preg_split('/[\s]+/', $date);
这将使用一个或多个空格作为分隔符
答案 1 :(得分:1)
为什么不在整个字符串上使用strtotime()
?
答案 2 :(得分:1)
如果要解析日期,请使用strtotime
:
$time = 'Sun Apr 1 02:05:49 2012 GMT';
$month = date('M', $ts); // Apr
$day = date('j', $ts); // 1
$year = date('Y', $ts); // 2012
它还确保将时间转换为您当前的时区,您可以这样更改:
date_default_timezone_set('GMT');
另一种选择是简单地使用strptime
,它实际上是为解析日期创建的,但不考虑时区:
$parsed = strptime($time, '%c');
答案 3 :(得分:1)
正如Alex Howansky建议的那样,你应该使用一些日期/时间解析功能。然后,您可以使用date()或DateTime :: format()以所需格式输出日期:
$formatA = 'Sat Mar 31 02:05:49 2012 GMT';
$formatB = 'Sun Apr 1 02:05:49 2012 GMT';
var_dump(
new DateTime( $formatA ),
new DateTime( $formatB ),
date( 'Y-m-d H:i:s', strtotime( $formatA ) ),
date( 'Y-m-d H:i:s', strtotime( $formatB ) )
);
输出:
object(DateTime)#1 (3) {
["date"]=>
string(19) "2012-03-31 02:05:49"
["timezone_type"]=>
int(2)
["timezone"]=>
string(3) "GMT"
}
object(DateTime)#2 (3) {
["date"]=>
string(19) "2012-04-01 02:05:49"
["timezone_type"]=>
int(2)
["timezone"]=>
string(3) "GMT"
}
string(19) "2012-03-31 04:05:49"
string(19) "2012-04-01 04:05:49"
答案 4 :(得分:0)
您可以使用array_filter()
去除所有评估为FALSE的数组条目。请参阅:http://php.net/manual/en/function.array-filter.php
虽然,我应该注意,我可能会使用Darhazer的解决方案。这里只提一下array_filter(),因为我不确定使用preg_split()
的性能开销与array_filter()
相比是什么。