TYPO3 FLUID模板如何计算时间戳与当前日期的天数差
问题原因
你的代码不生效主要是两个问题:
- Fluid模板不会自动解析你直接写在大括号外的减法表达式,只会将整段内容作为普通字符串原样输出
- 你将日期格式化为
Y-m-d格式的字符串后,本身不支持直接做数值减法,就算强制运算也无法得到正确的天数差
实现方案
方案1:时间戳计算(兼容所有TYPO3版本)
先将两个日期转为Unix时间戳(单位为秒的纯数值格式),相减后除以一天的总秒数86400,取整即可得到天数差:
<f:if condition="{data_item.tx_mask_date}"> <p class="ww-teaserbox__date"> <f:variable name="nowTimestamp" value="{f:format.date(date: 'now', format: 'U')}" /> <f:variable name="publishTimestamp" value="{f:format.date(date: data_item.tx_mask_date, format: 'U')}" /> <f:variable name="diffDays" value="{(nowTimestamp - publishTimestamp) / 86400}" /> <f:format.number decimals="0">{diffDays}</f:format.number>天前发布 </p> </f:if>
如果需要处理发布日期为未来时间的场景,可以加一层判断输出不同提示:
<f:if condition="{diffDays} > 0"> <f:then><f:format.number decimals="0">{diffDays}</f:format.number>天前发布</f:then> <f:else if="{diffDays} < 0">还有<f:format.number decimals="0">{diffDays * -1}</f:format.number>天发布</f:else> <f:else>今日发布</f:else> </f:if>
方案2:使用原生日期差视图助手(适用TYPO3 11 LTS及以上版本)
TYPO3 11及以上版本自带f:format.date.diff视图助手,可直接输出相对时间文本,无需手动计算:
<f:if condition="{data_item.tx_mask_date}"> <p class="ww-teaserbox__date"> {f:format.date.diff(date: data_item.tx_mask_date, referenceDate: 'now')}发布 </p> </f:if>
该助手会自动根据时间差输出2天前、3小时前、1个月前等符合日常使用习惯的相对时间描述。
内容的提问来源于stack exchange,提问作者PHilgarth
相关产品推荐
相关产品推荐

