平台: PHP& mySQL
我将日期+时间存储在数据库中,格式如下:date(“Y-m-d H:i:s”)。我在数据库中拥有的值的示例是:2010-01-05 07:36:33。在我的脚本中,我将时区设置为date_default_timezone_set("America/Chicago");
问题:
我在某处读到了UNIX_TIMESTAMP,我在查询中使用了它。来自DB的日期值的UNIX_TIMESTAMP的值似乎与strotime(DB date Value)不同。
示例:
请考虑我的数据库中日期列的其中一个数据库值是 2010-01-05 07:36:33 现在,如果我按以下方式获取此日期:
$result = mysql_query("SELECT date, UNIX_TIMESTAMP(date) AS ut_date FROM table");
$row = mysql_fetch_row($result);
//The result of this is:
$row['date'] = 2010-01-05 07:36:33
$row['ut_date'] = 1262657193
strtotime($row['date']) gives 1262698593
对于我在申请中的进一步计算,我需要使用strtotime(日期)。我有很多比较这样做。如果UNIX_TIMESTAMP(date)与strtotime(date)相同,我的问题就解决了。我需要使用的示例查询之一是:
$gap = 1; // time in minutes
$tm2 = date ("Y-m-d H:i:s", mktime (date("H"),date("i")-$gap,date("s"),date("m"),date("d"),date("Y")));
$target = strtotime($tm2);
$result2 = mysql_query("UPDATE table2 SET stat = 0 WHERE UNIX_TIMESTAMP(today_login_time) < $target ");
上面给出的结果不正确。如果我尝试在上面的查询中用strtotime替换UNIX_TIMESTAMP,它会给我一个错误,因为函数strtotime似乎是PHP函数而不是各自的mySQL函数。 strtotime有相应的mySQL功能吗?我该如何解决上述问题? 解决上述问题的代码非常感谢。
提前谢谢。
答案 0 :(得分:7)
你的MySQL服务器和你的php实例的时区可能不同。 e.g。
echo date('Y-m-d H:i:s T', 1262657193);
在我的机器2010-01-05 03:06:33 CET
上打印(注意CET时区,即UTC + 1),而MySQL服务器将相同的unix时间戳解释为2010-01-05 07:36:33
见http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
和http://docs.php.net/datetime.configuration#ini.date.timezone
答案 1 :(得分:1)
您不需要将sql时间戳转换为unix以进行where查询。只需使用DATE_FORMAT就可以使事情变得更简单:
WHERE DATE_FORMAT(`today_login_time`, "%Y-%m-%d") < '.date('Y-m-d', $my_tsp)
答案 2 :(得分:1)
由于差异恰好是11.5小时,因此您似乎遇到了时区问题。
答案 3 :(得分:0)
格式日期(“Y-m-d H:i:s”)无法准确描述日期和时间,因为它不包含时区。由于没有提供时区,因此Web服务器和数据库都在使用明显不同的时区。
您应该考虑将日期作为unix时间戳存储在数据库中。 unix时间戳只是自Unix Epoch(1970年1月1日00:00:00 GMT)以来经过的秒数。这不受时区或日光节省的影响。这样,您只需要在转换为实际日历日期和时间时担心时区和夏令时。