php - 确定DateTime是否落在DateInterval上

时间:2013-07-18 07:10:45

标签: php datetime dateinterval

我正在尝试确定DateTime是否与可能出现的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;
}

这似乎在同一个方向上应用了两次间隔,所以我再次尝试使用->sub()->add(),导致致命错误“DateTime :: sub():只有非特殊减法支持相对时间规范“。似乎根本没有实现这种功能。

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

提前感谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我同意tuxnani,使用strtotime()将所有日期转换为unix格式要容易得多,然后只需将数值与更多或更少的操作进行比较。