2011-04-12 50 views
0

我目前使用这个数据库:使用转换UNIX时间戳来查询

$rawsql = "SELECT 
* 
FROM 
    _erc_foffices n 
INNER JOIN 
    _erc_openings o ON n.id = o.branch_id AND o.dotw = DAYOFWEEK(CURRENT_DATE()) 
INNER JOIN 
    _erc_openings_times t ON o.id = t.opening_id 
WHERE 
(
    UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) BETWEEN 
     UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
    AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
) 
AND 
(
    n.id = %d 
) 
    ;"; 

来查询数据库,并返回所有的细节,从使馆,如果它是当前打开。

现在,而不是CURRENT_TIMESTAMP(),我需要找出存储在变量$current_local_time中的时间是否在2个数据库值之间。时间表时间需要存储在当地时间而不是伦敦时间,所以这就是为什么我要转换它们。

我试图与

WHERE 
    (
     UNIX_TIMESTAMP($current_local_time) BETWEEN 
      UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
     AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

更换

WHERE 
    (
     UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) BETWEEN 
      UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
     AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

,但我只是得到错误信息。有人可以告诉我,我会如何正确地做到这一点?

感谢所有帮助

编辑:$current_local_time变量取像这样:

date_default_timezone_set('Europe/London'); 
$time = date("H:i", time()); 
$myDateTime = new DateTime($time, new DateTimeZone('GMT')); 
$myDateTime->setTimezone(new DateTimeZone($timezone)); 
$current_local_time = $myDateTime->format('H:i:s'); 

和输出无论在对方国家的当前时间回荡时。

编辑2:

我已经改变了$ current_local_time这样:

$current_local_time = $myDateTime->format('H:i:s'); 
$timestamp2 = strtotime($current_local_time); 

和where子句此:

WHERE 
(
    '$timestamp2' BETWEEN 
     UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
    AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
) 

这工作不错,但如果t.close设置23点30分,直到23点31分才会关闭。有没有办法从捕获的时间中抽出一分钟来解决这个问题?

+1

你得到的错误信息是什么? – syrion 2011-04-12 14:25:43

+0

警告:mysql_num_rows()期望参数1是资源,在第185行E:\ wamp \ www \ app \ webroot \ erc \ index.php中给出的布尔值012, 警告:mysql_num_rows()期望参数1为资源,布尔值在E:\ wamp \ www \ app \ webroot \ erc \ index.php在197: – 2011-04-12 14:32:28

回答

0

,你将需要的时间戳被表示成一个字符串,所以你需要

WHERE 
    (
     UNIX_TIMESTAMP('$current_local_time') BETWEEN 
      UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
     AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

它甚至更好,使用SQL框架,让你做参数绑定,指定查询如下,并在PHP中将?绑定到$current_local_time

WHERE 
    (
     UNIX_TIMESTAMP(?) BETWEEN 
      UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
     AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

编辑:我想你想

(UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open))  <= '$timestamp2' 
AND 
'$timestamp2' < UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close))) 
--    ^^^ Note the less-than sign 

你也许并不需要围绕$timestamp2报价了。

+0

E:\ wamp \ www。approot \ erc \ index.php中给出嗨,我已经在变量名称周围添加了单引号,但查询没有返回任何结果。$ current_local_time目前设定为22:50(越南时间),而我今天晚上的开放时间设定为23:59,所以如果返回结果,它应该显示为开放。还有什么我需要改变?感谢您的帮助 – 2011-04-12 14:51:39

+0

22:50在23:59之前,所以它不在开放时间。 (除非你的意思是't.close'是23:59)。 – 2011-04-12 14:57:57

+0

对不起,我应该更清楚,我的意思是t.close是23:59。我想我现在正在使用单引号工作,但我必须删除UNIX_TIMESTAMP。我会用我现在所拥有的内容更新我的帖子......只需在分钟进行测试 – 2011-04-12 15:11:17