PHP strtotime() 将日期设置为默认值



我有一个脚本,它从 excel 表中读取值并将它们插入到 sql 表中。我的问题是,当脚本读取某些日期字段时,它会将它们设置为默认值:1970-01-01 01:00:00

我注意到,当遇到"日"大于 12 的日期时,就会发生这种情况: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("Y-m-d H:i:s", strtotime($start_time));

输出:

2012-01-05 18:32:45

这是我正在寻找的确切格式(除了日期和月份字段被切换的事实,即美国日期格式),但它不适用于我上面提到的日期类型。

使用 DateTime 对象可能是您的解决方案。 你可以做

$dt = DateTime::createFromFormat("d/m/Y H:i:s", $data->val($x,5););
echo $dt->format('Y-m-d H:i:s');

,然后选择所需的格式。

这应该可以为您完成工作:

// 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()的注释来看,该函数假定由/分隔的日期是m/d/y,由-分隔的日期是d-m-y的。

您可以替换日期字符串中的斜杠,或者如果您使用的是 5.3 或更高版本,请使用 date_parse_from_format() 并直接提供格式。

正如jaudette所提到的,你也可以使用DateTime::createFromFormat(),并获取一个对象而不是时间戳。

相关内容

  • 没有找到相关文章

最新更新