我试图削减特殊字符在这个日期,当我尝试转换为日期的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
在第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