额外的空间被添加到阵列

时间:2012-04-02 14:34:59

标签: php arrays explode

我的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] 等。

感谢。

5 个答案:

答案 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()相比是什么。

相关问题