php - 确定DateTime是否落在DateInterval上

pos*_*spi 5 php datetime dateinterval

我试图确定是否DateTime与a的可能发生完全一致DateInterval.我正在使用的间隔需要允许"下个月的第N个Xday"类型格式规范,并且我不确定在这些条件下这样的事情是可能的.

我的基本想法是将其反转DateInterval,将其应用于原始克隆DateTime,将其原样放回原处,再次应用,然后检查两个DateTime实例是否相等.如果是这样,它恰好发生在间隔上:

public static function dateFallsOnPeriod(DateTime $date, DateInterval $interval)
{
    $compare = clone $date;

    // invert the period, apply it to the date, uninvert & then reapply
    $interval->invert = 1;
    $compare->add($interval);
    $interval->invert = 0;
    $compare->add($interval);

    return $date == $compare;
}
Run Code Online (Sandbox Code Playgroud)

这似乎在相同的方向上应用了两次间隔,因此我再次尝试使用->sub()->add(),导致致命错误"DateTime :: sub():仅减去非特殊的相对时间规范".似乎根本没有实现这种功能.

有没有人有更好的想法,而不是在开始日期之后选择一个偏移的丑陋和低效的解决方案并向前迭代直到我们匹配它或过去?

提前致谢!

tux*_*ani 0

一种可能性是从日期时间生成 Unix 时间戳并比较整数值。