背景
我正在将Limesurvey与一个应用程序集成,在该应用程序中,新的调查令牌将直接添加到Limesurve数据库中。在插入之前,我需要检查Limesurvey中给定的一组标记(具有validfrom
和validuntil
属性(是否与给定的日期范围(DateTime
(相交。
问题
由于Limesurveys令牌validfrom
和validuntil
属性可以是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);