Php 在可能为NULL的情况下计算日期时间交点的一种方法

Php 在可能为NULL的情况下计算日期时间交点的一种方法,php,datetime,comparison,limesurvey,Php,Datetime,Comparison,Limesurvey,背景 我正在与一个应用程序集成,其中新的调查令牌直接添加到Limesurvey数据库。在插入之前,我需要检查Limesurvey中给定的一组令牌(具有validfrom和validuntil属性)是否与给定的日期范围(DateTime)相交 问题 由于Limesurveys tokenvalidfrom和validuntil属性可以是NULL,因此无法对DateTime进行简单的比较,或者可以吗 (Limesurveyvalidfrom/validuntilNULL值表示“始终”) 我拥有的 一

背景

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

问题

由于Limesurveys token
validfrom
validuntil
属性可以是
NULL
,因此无法对
DateTime
进行简单的比较,或者可以吗

(Limesurvey
validfrom/validuntil
NULL
值表示“始终”)

我拥有的

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

代码:

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

我的要求


考虑到比较值的特殊性,是否有改进/优化此方法的方法?

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

if(为空($token['validfrom'])){
$token_validfrom=新日期时间('0000-01-01 00:00:00');
}否则{
$token_validfrom=新日期时间($token['validfrom']);
}
if(为null($token['validuntil'])){
$token_validuntil=新日期时间('9999-12-31 23:23:59');
}否则{
$token_validuntil=新日期时间($token['validuntil']);
}
这样,只需要最后一行比较:

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

我不明白这个问题:你到底想优化什么以及为什么?@BurninLeo好的,还不够清楚……我最好奇的是,是否有更平滑的方法来实现相同的结果。这取决于你想要更平滑的方法。例如,如果你用非对象解决方案替换“new DateTime”,脚本速度会更快,但可读性会更低e、 这实际上相当漂亮。在C#中有一个
DateTime.MinValue
DateTime.MaxValue
,但我认为php不是这样。我想我会使用0001-01-01作为“from”值,就像在C#中使用的那样。