在流畅的模板中,我有一个开始日期和结束日期。我如何获得介于两者之间的日期,以便列出所有日期?
<f:format.date format="%d">{newsItem.datetime}</f:format.date>
<f:format.date format="%d">{newsItem.eventEnd}</f:format.date>
答案 0 :(得分:1)
没有开箱即用的解决方案,但您可以编写自己的viewhelper,它会获取这两个DateTime
个对象,并返回一个DatePeriod
对象,您可以使用<f:for>
方便地进行迭代在你的模板中。对于每次迭代,您都会再次获得一个DateTime
对象,您可以照常格式化。
答案 1 :(得分:1)
为此您可以创建自己的ViewHelper
,并且您需要传递开始日期和结束日期,并且它将返回DatePeriod
对象,您可以使用该对象进行循环(<f:for>
)在Fluid
模板中。
您可以尝试以下内容:
在流体模板中使用ViewHelper
:
{namespace vh=Vendor\ExtensionKey\ViewHelpers}
<f:for each="{vh:DateRange(startdate:'{starttime}', enddate:'{endtime}')}" as="dates">
<f:format.date format="%d.%m.%Y">{dates}</f:format.date> <br/>
</f:for>
ViewHelper类:
<?php
namespace Vendor\ExtensionKey\ViewHelpers;
/**
* Date Range ViewHelper
*/
class DateRangeViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper
{
/**
* @return void
*/
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('startdate', 'string', 'start date', true);
$this->registerArgument('enddate', 'string', 'end date', true);
}
/**
* @return \DatePeriod $dateRange
*/
public function render()
{
$startdate = new \DateTime($this->arguments['startdate']);
$enddate = new \DateTime($this->arguments['enddate']);
$interval = new \DateInterval('P1D'); // 1 Day
$dateRange = new \DatePeriod($startdate, $interval, $enddate);
return $dateRange;
}
}
参考文献:
希望这对你有帮助!