在Fluid中获取开始和结束之间的日期

时间:2018-03-01 01:06:14

标签: typo3 fluid typo3-7.6.x

在流畅的模板中,我有一个开始日期和结束日期。我如何获得介于两者之间的日期,以便列出所有日期?

<f:format.date format="%d">{newsItem.datetime}</f:format.date>
<f:format.date format="%d">{newsItem.eventEnd}</f:format.date>

2 个答案:

答案 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;
    }
}

参考文献:

希望这对你有帮助!