查找在另一个Unix时间戳MySQL的同一天之内的所有记录

时间:2019-04-11 22:41:41

标签: php mysql unix-timestamp

假设我有一个1497664242的统一时间戳,即Saturday, June 17, 2017 1:50:42 AM

我想在同一天找到表中所有带有时间戳的记录。

我尝试设置一个1494979200之类的时间戳记,Saturday, June 17, 2017 12:00:00 AM认为我可以使用当天的一般时间并提取当天匹配的所有记录。

我正在尝试从特定日期开始循环查找所有匹配的记录,然后增加1天直到今天04/12/2019

$start_date = "05/17/2017";

while ($start_date != "04/12/2019") {
    $timestamp = strtotime($start_date);
    $sql_select = "SELECT * FROM table WHERE DATE(timestamp) = DATE(FROM_UNIXTIME($timestamp))";
    $result_select = $GLOBALS['db']->query($sql_select);
    while ($row = $result_select->fetch_array()) {
        // will do stuff here
    }
    $start_date = date("m/d/Y", strtotime($start_date. "+1 day"));
}

2 个答案:

答案 0 :(得分:1)

如果您将时间戳转换为日期(即2017年6月17日)以及数据库中的时间戳字段,那么您应该会在当天获得任何一行

现在我们知道列<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Furby</title> <link href="static/layout/styles/layout.css" rel="stylesheet" type="text/css" media="all"> <script src="static/layout/scripts/jquery.min.js"></script> <script src="static/layout/scripts/jquery.backtotop.js"></script> <script src="static/layout/scripts/jquery.mobilemenu.js"></script> <script src="static/layout/scripts/jquery.flexslider-min.js"></script> <script> $(function () { var tableUserData = document.getElementById('userdata-tbody'); ... for(var i = tableUserData.rows.length; i--;) { tableUserData.deleteRow(i); } ... }); </script> </head> <body> ... <table> <thead> <tr> <th>Title</th> <th>Cover</th> </tr> </thead> <tbody id="userdata-tbody"></tbody> </table> ... </body> </html> 实际上定义为VARCHAR(),您将必须执行此操作

timestamp

因此,您的实际代码

SELECT * 
FROM table 
WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date';

答案 1 :(得分:0)

我不会按照建议(DATE(FROM_UNIXTIME(timestamp)))在SQL查询中使用函数,因为这将阻止SQL在时间戳列上使用索引。

我会用php(日期的开始+结束)计算两个日期时间,如下所示:

$dt       = new DateTime('@' . $timestamp); // Should take care about timezones if you need
$dt_begin = $dt->format('Y-m-d 00:00:00');
$dt_end   = $dt->format('Y-m-d 23:59:59');

如果您在数据库中的时间戳记存储为整数:

SELECT
    * 
FROM
    table 
WHERE
    timestamp BETWEEN UNIX_TIMESTAMP('$dt_begin') AND UNIX_TIMESTAMP('$dt_end')

如果您在数据库中的时间戳记存储为TIMESTAMP或DATETIME:

SELECT
    * 
FROM
    table 
WHERE
    timestamp BETWEEN '$dt_begin' AND '$dt_end'