TYPO3 12中f:format.date输出1970-01-01问题求助
TYPO3 12中<f:format.date>输出01.01.1970的解决方案
问题原因
TYPO3 12对Fluid的日期处理逻辑做了严格升级,<f:format.date>不再自动解析任意字符串格式的日期,仅接受DateTime对象、时间戳,或通过明确参数指定的可解析字符串。直接传入数据库存储的Y-m-d格式字符串时,会被判定为无效时间,返回Unix纪元起始日期(01.01.1970)。
解决方案
1. 模型层修正(推荐)
在扩展的模型类中,将startdate字段的类型定义为\DateTimeInterface或\DateTime,TYPO3的ORM会自动把数据库的日期字符串转换为DateTime对象,模板无需修改即可正常输出:
/** * @var \DateTimeInterface|null */ protected $startdate; /** * @return \DateTimeInterface|null */ public function getStartdate(): ?\DateTimeInterface { return $this->startdate; }
2. 模板层临时适配
如果暂时无法修改模型,可通过<f:format.date>的parse参数指定输入格式,让Fluid正确解析字符串:
<f:format.date format="d.m.Y" parse="Y-m-d">{foo.startdate}</f:format.date>
3. 控制器层转换
在控制器中手动将字符串日期转换为DateTime对象后再传递给模板:
// 假设$foo是从数据库获取的对象 $startdateStr = $foo->getStartdate(); if ($startdateStr) { $foo->setStartdate(\DateTimeImmutable::createFromFormat('Y-m-d', $startdateStr)); } $this->view->assign('foo', $foo);
内容的提问来源于stack exchange,提问作者t3fan
相关产品推荐
相关产品推荐

