PHP的strtotime()设置date为默认值
我有一个脚本是从Excel表中读取值并将其插入到一个SQL表中。 我的问题是当脚本读取一些date字段时,它将它们设置为默认值: 1970-01-01 01:00:00
我注意到,这是发生在“日”大于12月13日13/05/2012 18:52:33
12月13日13/05/2012 18:52:33
(dd-mm-yyyy hh-mm-ss)
我以为这可能是由于脚本认为这是月份字段(即美国格式),并认为它是一个无效值,所以我设置默认的时区我自己希望它可以解决问题,但没有任何区别。 date_default_timezone_set('Europe/Dublin');
这里是我的代码正在做的一个例子:
Excel字段值:
01/05/2012 18:32:45
脚本:
$start_time = $data->val($x,5); echo $start_time = date("Ymd H:i:s", strtotime($start_time));
输出:
2012-01-05 18:32:45
这是我正在寻找的确切格式(除了date和月份字段切换,即美国date格式的事实除外),但它不适用于我上面提到的datetypes。
使用DateTime
对象可能是您的解决scheme。 你可以做
$dt = DateTime::createFromFormat("d/m/YH:i:s", $data->val($x,5);); echo $dt->format('Ymd H:i:s');
并select你想要的格式。
这应该为你做的工作:
// example datetime $orig_date = '13/05/2012 18:52:33'; // split date & time into array $date_time = preg_split('/\s+/', $orig_date); // date in array formated as ddmmyyyy list($d, $m, $y) = preg_split('/\//', $date_time[0]); // date re-formated as yyyy-mm-dd for MySQL $new_date = sprintf('%4d-%02d-%02d', $y, $m, $d); // And add time on again with a space for MySQL datetime format echo $new_date.' '.$date_time[1];
从strtotime()
的注释,函数假定由/
分隔的date和由-
分隔的date是dmy
。
你可以在datestring中replace斜杠,或者如果你使用的是5.3或更高版本,可以使用date_parse_from_format()
,并直接提供格式。
正如jaudette所提到的,你也可以使用DateTime::createFromFormat()
,并获得一个对象而不是一个时间戳。