PHP DateTime :: __ construct():当年份为三位数

时间:2016-12-09 13:27:18

标签: php symfony datetime

我有一个Symfony控制器,它接收来自客户端的请求,并且必须将日期(例如 12-12-2004 )解析为DateTime对象并将其存储在D B。它工作得很好,除非我尝试输入一个三位数年份的日期,例如:

  

DateTime :: __ construct():无法解析位置7(4)处的时间字符串(12-12-940):意外字符

代码本身非常简单,我只是对来自客户端请求的值调用new /DateTime

2 个答案:

答案 0 :(得分:3)

错误消息告诉您一切。 DateTime期望年份为四位数。如果您的年份只有三位数,则必须添加填充零。 new \DateTime("12-12-0940");效果很好。

要填充字符串,您可以使用str_pad

$padded_year str_pad($year, 4, '0', STR_PAD_LEFT);

您还可以将此代码与array_map结合使用,将日期字符串拆分并连接到正确的填充日期字符串,如此

$date = "2-2-940";
$date = join('-', array_map(function($number, $padding) {
    return str_pad($number, $padding, '0', STR_PAD_LEFT);
}, explode('-', $date), [2,2,4]));

答案 1 :(得分:0)

DateTime的构造函数无法处理三位数的年份。一种可能的解决方案是以某种方式使用setDate()

$dateString = "12-12-940";
list($day, $month, $year) = explode('-', $dateString);

$date = new DateTime();
$date->setDate($year, $month, $day);