数据库时间,时区&午夜


Time from dbase, Time Zone & Midnight

我的mysql数据库中有一些典型的日期格式,如YYYY-MM-DD和时间00:00:00。我的SELECT查询看起来像

$STH_1 = $DBH->query("SELECT table_name                        
                         FROM information_schema.tables                        
                        WHERE table_name                        
                         LIKE 'v_c_ei'_9%'"); 
$stmts_1 = array();
foreach($STH_1 as $row_1) { 
$stmts_1[] = sprintf("SELECT *
                      FROM %s 
                     WHERE date='%s'", $row_1['table_name'], $date); 
}
$stmt_1 = implode("'nUNION'n", $stmts_1);  
$stmt_1 .= "'nORDER BY time ASC";  
$STH_5_2 = $DBH->query($stmt_1);

日期变量是典型的日期格式,如YYYY-MM-DD。

F.ex。我们有一个日期和时间23:30:00的事件(在数据库中所有时间都是UTC)。我有一个用户从不同的时区(f.ex +1.00)。对于他来说,系统必须显示的事件不是DATE和time 23:30:00,而是DATE+1和time 00:30:00。但是此时,系统显示这个事件的DATE和time为00:30:00(只更改时间,不更改日期)-当然可能在主数据库SELECT之后时间发生了变化。

所有接收到的要显示的事件必须只来自一个日期,时间从00:00:00到23:59:59。

我必须改变(可能在主SELECT查询)接收与用户时区相关的正确日期和时间?

由于您描述的细节是特定于用户的逻辑,因此理想情况下,您希望尽可能晚地进行格式化。一般来说,在数据库和应用程序逻辑中处理UTC日期是一种很好的做法,只有在显示给用户时才格式化它们。

你考虑过使用DateTime对象吗?您可以将数据库查询中的日期加载到一个新实例中,然后根据用户首选项和setTimezone()方法操作对象。