假设我有一个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"));
}
答案 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'