运行PHP 5.3.28
我有一个特定的日期作为字符串返回,strtotime窒息,所以我想尝试DateTime::createFromFormat(),然而,尽管尽了最大的努力得到错误。
<?php
$freshdate = '09/07/2015 (Mon)';
$date = DateTime::createFromFormat("m/d/Y (D)", $freshdate);
if (!$date) {
var_dump('error', DateTime::getLastErrors());
}
结果是:
array (size=4)
'warning_count' => int 0
'warnings' => array (size=0)
'error_count' => int 2
'errors' => array (size=2)
12 => string 'A textual day could not be found' (length=32)
16 => string 'Data missing' (length=12)
这是PHP#65554的错误:
createFromFormat在格式D或l后面跟分隔符时失败不是空格或逗号。
如何修复?更改格式或升级PHP版本
来自5.4.20版本的更新日志:-修复了当工作日名称后跟一些分隔符时createFromFormat失效的问题
问题出在日期
后面的)
您可以通过修剪后面的)
:
$freshdate = '09/07/2015 (Mon)';
$date = DateTime::createFromFormat("m/d/Y (D", rtrim($freshdate, ')'));
if (!$date) {
var_dump('error', DateTime::getLastErrors());
}
使用
<?php
$freshdate = '09/07/2015 (Mon)';
$date = DateTime::createFromFormat("m/d/Y (D)", $freshdate);
echo $date->format('m/d/Y (D)');
这应该可以工作,将其转换为unix时间戳:
$freshdate = explode('/', '09/07/2015 (Mon)');
$year = explode(' ', $freshdate[2]);
$unix_date = mktime(0,0,0,$freshdate[0],$freshdate[1],$year[0]);
可能不是最好的答案,但它绝对是一个答案:)