从int字段中减去php mysql查询中的时间

时间:2011-02-05 05:51:01

标签: php mysql datetime

我被赋予了修复一些非常混乱的代码的任务,我们的一个客户是由一个狡猾的自由职业者写的......我不是非常热衷于重写整个事情,因为它一直在使用一段时间以来,它只是在他们要求另一个功能时才真正引起了问题。该程序的各种其他部分使用该数据库,该功能仅占整个系统的一小部分。

本质上,脚本的目的是管理虚拟办公室中的所有会议。 他们需要一个页面来显示“当前”会议。这是原始查询。

$CURRENT_TIME=date("Gi");


mysql_connect(localhost,$USERNAME,$PASSWORD);
@mysql_select_db($DATABASE) or die( "Unable to select database");
$query="SELECT * FROM ROOM_1 WHERE 
EVENT_ROOM LIKE'%$URLROOMNAME%' 
AND EVENT_YEAR='$CURRENT_YEAR' 
AND EVENT_MONTH='$CURRENT_MONTH' 
AND EVENT_DATE='$CURRENT_DATE' 
AND START_TIME<='$CURRENT_TIME'
AND END_TIME>='$CURRENT_TIME' ";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();

时间作为24小时值存储在int字段的mysql表中。例如,下午3:43被存储为1543。 新要求是会议能够设置安排时间。 自由职业者......“巧妙”的解决方案是在表格中添加另一个int字段并更改此行

AND START_TIME<='$CURRENT_TIME'

要..

AND (START_TIME-APPEAR_START_TIME)<='$CURRENT_TIME'

现在虽然它可能适用于某些会议,但它不适合其他人,例如,在1405开始的会议,设置允许时间为20分钟,这将导致1385 ...

所以我正在寻找一个聪明的解决方案,允许我单独留下其余部分,只需从查询中的$ START_TIME列中减去APPEAR_START_TIME字段,但需要几分钟。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你有两个“HHMM”形式的整数值,其中HH是小时,MM是分钟;并且您想要计算两个时间值之间的差异。

您可以使用value / 100获得HH,使用value % 100获得MM。然后,您可以分别计算小时和分钟的增量。

小时增量是(HH值delta +大概1小时由分钟增量引起,如果MM-start&lt; MM-appear-start):

(START_TIME / 100 - APPEAR_START_TIME / 100) + (START_TIME % 100 - APPEAR_START_TIME % 100) / 60

分钟delta是:

(START_TIME % 100 - APPEAR_START_TIME % 100) % 60

然后你可以连接delta的HH和MM部分:

HOURS_DELTA * 100 + MINUTES_DELTA

答案 1 :(得分:0)

首先,谢谢Kel:)

我认为这个更容易:

<(>((START_TIME / 100)* 60 +(START_TIME%100) - APPEAR_START_TIME)/ 60)* 100 +(((START_TIME / 100)* 60 +(START_TIME%100) - APPEAR_START_TIME)%60)