Symfony fixtures调用setDate方法提示需实现DateTimeInterface接口错误
错误原因
\DateTime::createFromFormat()方法在格式与待解析字符串不匹配时会返回布尔值false而非DateTime实例,你传入的格式串存在两处错误,导致解析失败返回了false,触发参数类型报错:- 小时格式错误:你使用了小写
hh,小写h为12小时制格式符,且无需重复书写,你传入的20点属于24小时制时间,应使用大写格式符H - 分钟格式错误:你使用了
mm作为分钟格式,m是月份对应的格式符,分钟的正确格式符为i
- 小时格式错误:你使用了小写
- 代码存在变量名不统一问题:你实例化实体时赋值给
$match1,后续调用方法、持久化时使用的是未定义的$m1,未修正的话也会触发额外报错。
修正代码
$match1 = new Matchs(); $match1->setDescription('Description ') ->setDate(\DateTime::createFromFormat('d-m-Y H:i', '25-12-2001 20:30')); $manager->persist($match1);
优化建议
可以增加解析结果校验逻辑,提前发现格式匹配问题,避免隐性报错:
$date = \DateTime::createFromFormat('d-m-Y H:i', '25-12-2001 20:30'); if (!$date instanceof \DateTimeInterface) { throw new \InvalidArgumentException('日期解析失败,请检查格式与字符串是否匹配'); } $match1 = new Matchs(); $match1->setDescription('Description ') ->setDate($date); $manager->persist($match1);
内容的提问来源于stack exchange,提问作者chtouk
相关产品推荐
相关产品推荐

