TYPO3 9.5中如何在if-else语句中访问日期时间对象属性
解决方案:TYPO3 9.5 Fluid中DateTime对象的时间部分条件判断
你的核心误区在于:Fluid模板里不能直接通过event.startdate.H或event.enddate.M这种格式符来访问DateTime对象的时间部分。TYPO3中的startdate/enddate是TYPO3\CMS\Core\Type\DateTime对象,它没有H、M这类属性,直接访问会返回空值,导致条件判断失效。
下面提供两种可行的解决方法:
方法一:先格式化时间部分到变量,再判断
用f:format.date的as属性将需要的时间片段(比如分钟数)存入变量,再用变量做条件判断:
<!-- 先提取enddate的分钟部分,存入endMinutes变量 --> <f:format.date format="%M" as="endMinutes">{event.enddate}</f:format.date> <!-- 基于变量做判断 --> <f:if condition="{endMinutes} != '00'"> <f:then>A</f:then> <f:else>B</f:else> </f:if>
方法二:直接在条件中内嵌格式化逻辑
如果不想额外定义变量,可以直接在f:if的condition参数里调用f:format.date:
<f:if condition="{f:format.date(date: event.enddate, format: '%M')} != '00'"> <f:then>A</f:then> <f:else>B</f:else> </f:if>
补充说明
- 如果你需要判断的是小时数(对应
%H),只需要把上述代码中的%M替换为%H即可。 - 你之前尝试的
v:condition.string.contains失效的原因是:直接输出{event.startdate}时,Fluid会将DateTime对象转为默认格式的字符串(比如YYYY-MM-DD HH:MM:SS),但这种方式依赖默认格式,稳定性差,远不如直接用f:format.date提取指定部分可靠。
内容的提问来源于stack exchange,提问作者kalinka91
相关产品推荐
相关产品推荐

