负日期间隔

php
2022-08-30 18:40:47

我想创建一个 DatePeriod 对象,其中包含一个负的 DateInterval。

这将创建一个 DatePeriod,年份从今天增加到 2016 年。

$this->Set('dates', new DatePeriod(new DateTime(), new DateInterval('P1Y'), new DateTime('2016-06-06')));

我想从2016年开始,并使用负面的DateInterval向今天的一年迈进

像这样的东西可能会说明我的愿望。

$this->Set('dates', new DatePeriod(new DateTime('2016-06-06'), new DateInterval('-P1Y'), new DateTime()));

我只是找不到任何关于DatePeriod或DateInterval如何做到这一点的扩展信息。我发现的只是DateInterval可以颠倒过来。


答案 1

根据 kevinpeno 在 2011 年 3 月 17 日 07:47 在 php.net 的页面上关于 DateInterval::__construct() 的评论,您不能通过构造函数直接创建负的 DateIntervals:

new DateInterval('-P1Y'); // Exception "Unknown or bad format (-P1Y)"

相反,您需要创建一个正间隔并将其属性显式设置为:invert1

$di = new DateInterval('P1Y');
$di->invert = 1; // Proper negative date interval

我自己刚刚检查了上面的代码,它就是以这种方式工作的。


答案 2

这需要一点挖掘。我能够得到否定的唯一方法是这样做:DateInterval

$interval = DateInterval::createFromDateString('-1 day');

但是,有一个问题。 似乎不适用于负间隔。如果将开始日期设置为结束日期之前,则它根本不包含任何日期,如果您翻转以使开始日期在结束日期之后,则它会无限期地向后看。DatePeriod

您可能必须重构代码,以使用正数或负数来循环显示日期。DateTime::subDateIntervalDateTime::add


推荐