我将时间保存在数据库中,如下午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')
将给出1700,所以删除冒号然后比较也不会有效....
在此上下文中,更改数据库时间数据是不可能的。
plz帮助。如果我说错了某些事实,请纠正我。
答案 0 :(得分:11)
您可以使用:
$myTime = '19:30';
if (date('H:i') == date('H:i', strtotime($myTime))) {
// do something
}
答案 1 :(得分:4)
您可以构建一个新的DateTime对象,在随机日期设置时间。比较那两个对象。例如:
$my_time = new DateTime('January 1th 1970 19:30');
$comparable_time = new DateTime('January 1th 1970 '. date('H:i'));
if($my_time < $comparable_time) {
// do something
} else {
// do something else
}
请注意更改日志;
Version 5.2.2 DateTime object comparison with the comparison operators changed to work as expected. Previously, all DateTime objects were considered equal (using ==).
答案 2 :(得分:3)
您不能将比较运算符与此类字符串一起使用,因为当您执行字符串get converted to numbers first时。
对于单线程解决方案,您可以使用strcmp
:
if(strcmp($my_time, date('H:i')) == 1)
{
do something ...
}
上述条件在语义上等同于“如果$ my_time大于当前时间”,但仅当字符串的格式保持一致时! 引入错误很容易在此代码中如果由于任何原因$my_time
的格式与H:i
模式不直接对应。
将值降低到字符串通常不是您应该使用日期和时间的方式。更合适的解决方案是使用PHP 5.2.0中引入的本地DateTime
类(John Conde已经在his answer中给出了一个示例)。
然而,将时间视为愚蠢的标量值也有一个可能的优点:结果与人类的感知一致,即01:00总是晚于00:00。 DateTime
方法取决于当地时区和日期,并且可能无法始终为您提供预期结果。例如:
// assume we are in London
date_default_timezone_set('Europe/London');
// assume that today is March 25, 2012
$date1 = new DateTime("2012-03-25 01:00:00");
$date2 = new DateTime("2012-03-25 02:00:00");
// and...
if ($date1 == $date2) {
echo "WTF?!? Equal???";
}
<强> See it in action 强>
此测试的结果与比较“01:00”和“02:00”的某些标量表示的结果不同,因此考虑适当的语义用于比较是个好主意。
答案 3 :(得分:1)
$date1 = DateTime::createFromFormat('H:i', $my_time1);
$date2 = new DateTime();
if ($date1 > $date2)
{
// do something
}
答案 4 :(得分:0)
不要比较表示时间戳的字符串。而是使用strtotime()
将任何这样的字符串转换为只是数字的Unix时间戳,然后进行比较。您可以使用time()
获取当前时间的Unix时间戳:
$my_time = '19:30';
if (strtotime($my_time) > time()) {
// do something ...
}