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() ,并获得一个对象而不是一个时间戳。