我有时间保存在数据库中,如下午7:30作为一个varchar字段。我想检查这个时间是否大于现在的时间。
我将DB时间字符串转换为'19:30',现在我想这样做:
$my_time = '19:30';
if($my_time > date('H:i'))
{
do something ...
}
问题是,如果$my_time是非空字符串,上面的语句将总是返回true。
做strtotime($my_time)
也没用。strtotime('H:i',$my_time)
是00:00
执行(int)date('H:i')
将在实际时间为17:09时给予1700,因此删除冒号然后进行比较也不起作用。...
在这种情况下,更改数据库时间数据是不可能的。
请帮助。纠正我,如果我说错了一些事实。
5条答案
按热度按时间eyh26e7m1#
您可以使用以下命令:
lfapxunr2#
您可以构造一个新的DateTime对象,将时间设置为随机日期。比比较这两个物体更重要。例如:
请注意更新日志;
pnwntuvh3#
你不能对这样的字符串使用比较运算符,因为当你处理字符串get converted to numbers first时。
对于一行程序解决方案,可以使用
strcmp
:上面的条件在语义上等同于“if $my_time is greater than the current time”,* 但前提是字符串的格式保持一致!*很容易在此代码中引入bug如果由于任何原因
$my_time
的格式与H:i
模式不直接对应。将值简化为字符串通常不是使用日期和时间的方式。更合适的解决方案是使用PHP5中引入的原生
DateTime
类。2.0(John孔德已经在his answer中给出了一个例子)。然而,将时间视为哑标量值也有一个可能的优点:结果与人的感知一致,即01:00总是晚于00:00。
DateTime
方法取决于当地时区和日期,可能并不总是能给予预期的结果。示例:See it in action。
这个测试的结果与比较“01:00”和“02:00”的一些标量表示的结果不同,所以最好考虑一下比较的正确语义是什么。
vsnjm48y4#
von4xj4u5#
不要比较表示时间戳的字符串。相反,使用
strtotime()
将任何这样的字符串转换为Unix时间戳(只是数字),然后比较它们。你可以使用time()
获取当前时间的Unix时间戳: