选择仅在今天和将来的2天之间的结果

时间:2015-02-18 18:36:38

标签: php mysql

我对使用约会很困惑。如何编写此查询,以便仅选择今天和未来2天之间的结果?

日期存储在名为EstimatedTime的列中(带有" text" type ...),如此201502181150

<?php 

$stmt = $db->query('SELECT * FROM data WHERE Status = "D" ORDER BY id DESC');

/*
$Date = 201502181150;
$time_ahead = date('M d', strtotime($Date. ' + 2 days'));
// The above returns Feb 20, but how can I do this on MySQL?
*/

while($row = $stmt->fetch()) {
    echo "<tr>";
    echo '<td>' . date('M d', strtotime($row['EstimatedTime'])) . '</td>';
    echo "</tr>";
}

?>

任何帮助将不胜感激!非常感谢你。

4 个答案:

答案 0 :(得分:1)

如果将EstimatedTime列声明为数据类型DATETIMEDATE,那么它很简单:

WHERE t.EstimatedTime >= DATE(NOW())
  AND t.EstimatedTime  < DATE(NOW()) + INTERVAL 2 DAY

NOW()返回当前日期和时间,DATE()函数修剪时间部分,使其等于午夜。


如果列被声明为字符类型,而不是DATETIME(但为什么在上帝的绿色地球中你会这样做?),将DATETIME表达式转换为适当的规范格式的字符,所以字符串比较将适当地工作:

WHERE t.EstimatedTime >= DATE_FORMAT(DATE(NOW())                 ,'%Y%m%d%H%i%s')
  AND t.EstimatedTime  < DATE_FORMAT(DATE(NOW()) + INTERVAL 2 DAY,'%Y%m%d%H%i%s')

如果EstimatedTime存储为数字(整数)数据类型,则通过添加零来将字符串转换为数字...

WHERE t.EstimatedTime >= DATE_FORMAT(DATE(NOW())                 ,'%Y%m%d%H%i%s')+0
  AND t.EstimatedTime  < DATE_FORMAT(DATE(NOW()) + INTERVAL 2 DAY,'%Y%m%d%H%i%s')+0

答案 1 :(得分:1)

您可以使用str_to_date功能并添加间隔:

select str_to_date('201502181150', '%Y %m %d');

所以你的查询将是:

WHERE str_to_date(t.EstimatedTime, '%Y %m %d') >= date(now()) 
  AND str_to_date(t.EstimatedTime, '%Y %m %d') < date(now()) + interval 2 day

答案 2 :(得分:0)

PHP解决方案: 值201502181150是以毫秒为单位的日期吗?如果是这样,只需将其视为整数并添加1000*60*60*24*2即2天。你可以这样做:

$t = (int)$row['EstimatedTime'];
$query = "SELECT * FROM data WHERE EstimatedTime > $t AND EstimatedTime < ". ($t+1000*60*60*24*2) ." ORDER BY id DESC"

但是它必须执行2个MySQL查询。

答案 3 :(得分:0)

我会尝试像

这样的东西
<?php

$stmt = $db->query('SELECT * FROM data WHERE Status = "D" ORDER BY id DESC');

$currDate = time();

//$time_ahead = Current Date + 2 Days (172800 seconds = 2 days)
$time_ahead = $currDate + 172800;

while($row = $stmt->fetch()) {
    if (!strtotime($row['EstimatedTime'] < $currDate || !strtotime($row['EstimatedDate'] > $time_ahead))) {
        echo "<tr>";
        echo '<td>' . date('M d', strtotime($row['EstimatedTime'])) . '</td>';
        echo "</tr>";
    }
}

?>