转换日期的strtotime,输出总是有特殊字符空

问题描述 投票:1回答:1

我试图削减特殊字符在这个日期,当我尝试转换为日期的strtotime,输出总是空的。但在另一个迄今为止,它的工作。为什么呢?

数据的特殊字符:

   11:44:08 AM 10/24/2012   
   3:37:43 PM 9/8/2012   
   13:21:22 09/01/2017  Â
   0:30:06 13/09/2017  Â
   0:32:00 13/09/2017  Â

日期例如:

11:44:08 AM 10/24/2012 
3:37:43 PM 9/8/2012 
13:21:22 09/01/2017 
0:30:06 13/09/2017 
0:32:00 13/09/2017 

转换成的strtotime:

1351071848
1347111463
1504264882
empty *mean nothing 
empty 

CODE:

$test  = preg_replace("/[^0-9a-zA-Z \/:\-]/", "", $date);
$xtime = strtotime($date);
$result   = date("Y-m-d H:i:s",$xtime);

最后结果 :

2012-10-24 11:44:08
2012-09-08 15:37:43
2017-09-01 13:21:22
1970-01-01 01:00:00
1970-01-01 01:00:00
php regex preg-replace preg-match preg-match-all
1个回答
1
投票

基于these strtotime notes

在第m日期/ d / y或d-M-Y格式通过查看在各个组件之间的分离器消除歧义:如果隔板是斜线(/),则美国米/ d假定/ Y;而如果隔板为破折号(-)或点(.),则假定欧洲d-M-Y格式。然而,如果该年以两位数字格式给出和隔板为破折号(-),日期字符串被解析为Y-M-d。

你可以试试下面的逻辑,你可以进一步延伸如果需要的话:

$arr = ['Â  Â 11:44:08 AM 10/24/2012Â  Â','Â  Â 3:37:43 PM 9/8/2012Â  Â ','Â  Â 13:21:22 09/01/2017Â  Â','Â  Â 0:30:06 13/09/2017Â  Â','Â  Â 0:32:00 13/09/2017Â  Â'];
foreach ($arr as $date){
    $test  = preg_replace("~[^0-9a-zA-Z\s/:-]+~u", "", $date);
    $result = $test." => ";
    if (($xtime = strtotime($test)) === false) // European dd/MM/yyyy format?
    { 
        if (($xtime = strtotime(str_replace('/', '-', $test))) === false) {
            $result .= "UNKNOWN FORMAT"; // add more logic here if need be
        } else {
            $result .= date("Y-m-d H:i:s", $xtime);
        }
    }
    else { // OK, it is MM/dd/yyyy
        $result .= date("Y-m-d H:i:s",$xtime);
    }
    echo $result."\n";
}

输出:

11:44:08 AM 10/24/2012   => 2012-10-24 11:44:08
3:37:43 PM 9/8/2012    => 2012-09-08 15:37:43
13:21:22 09/01/2017   => 2017-09-01 13:21:22
0:30:06 13/09/2017   => 2017-09-13 00:30:06
0:32:00 13/09/2017   => 2017-09-13 00:32:00
© www.soinside.com 2019 - 2024. All rights reserved.