6

我正在尝试确定 a 是否DateTime与 a 的可能发生完全一致DateInterval。我使用的时间间隔需要允许“下个月的第 N 天”类型格式规范,鉴于这些条件,我不确定这样的事情是否可能。

我的基本想法是反转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()and ->add(),导致致命错误“DateTime::sub(): Only non-special relative time specification is supported for subtraction”。似乎根本没有实现这种功能。

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

提前致谢!

4

2 回答 2

0

I agree with tuxnani, it's much easier to convert all dates to unix format with strtotime(), then just compare numeric values with more or less operations.

于 2013-08-06T19:57:20.207 回答
0

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

于 2013-07-19T08:04:24.507 回答