0

背景

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

问题

既然 Limesurveys 的 tokenvalidfromvaliduntilattributes can be NULL,简单的比较DateTime就做不到了,还是可以吗?

(Limesurveyvalidfrom/validuntil NULL值意味着“总是”)

是)我有的

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

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

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

我问什么

鉴于比较值很特殊,有没有办法改进/优化这种方法?

4

1 回答 1

1

您可以用可能的第一个和最后一个日期替换 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);
于 2013-03-07T10:08:06.897 回答