一种计算DateTime交集的方法,其中NULL是可能的



背景

我正在将Limesurvey与一个应用程序集成,在该应用程序中,新的调查令牌将直接添加到Limesurve数据库中。在插入之前,我需要检查Limesurvey中给定的一组标记(具有validfromvaliduntil属性(是否与给定的日期范围(DateTime(相交。

问题

由于Limesurveys令牌validfromvaliduntil属性可以是NULL,因此无法对DateTime进行简单比较,还是可以?

(Limesurvey validfrom/validuntil NULL值表示"始终"(

我有什么

一个php类,用于检查Limesurvey属性是否为NULL(或否(,并根据需要返回交集的计算。

代码:http://phpfiddle.org/main/code/3vp-j3b

(这是foreach循环中的内容,第34-70行,这里很有趣(

我的要求

考虑到比较值的特殊性,有没有办法改进/优化这种方法?

您可以将null替换为可能的第一个和最后一个日期,以便于比较:

if (is_null($token['validfrom']) {
    $token_validfrom = new DateTime('0000-01-01 00:00:00');
} else {
    $token_validfrom = new DateTime($token['validfrom']);
}
if (is_null($token['validuntil']) {
    $token_validuntil = new DateTime('9999-12-31 23:23:59');
} else {
    $token_validuntil = new DateTime($token['validuntil']);
}

这样,只需要最后一行比较:

return ($validfrom == $token_validfrom) || ($validfrom > $token_validfrom ? $validfrom < $token_validuntil : $token_validfrom < $validuntil);

相关内容

  • 没有找到相关文章

最新更新