You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:17:32