根据unix时间戳和当前日期,从现在起7天后选择所有行

时间:2012-05-11 00:23:45

标签: php mysql date time

我有一个包含以下字段的表:

id - int
name - int
the_date - int

the_date是添加行时的unix时间戳

现在我正在尝试编写一个查询,该查询将选择从现在起7天内的所有行。我不是在讨论从time()选择行> = 7天,我需要使用time()获取当天的日期,然后运行一个SELECT,它会抓取插入的所有行从time()开始的7天。

我知道如何在time()之后的7天内使用简单的> = SELECT,但我不知道该怎么做,所以它选择unix时间戳所在的所有行特定的一天(从现在起7天)。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

$todayParts = getdate();    
$startToday = mktime(0, 0, 0, $todayParts['mon'], $todayParts['mday'], $todayParts['year']);
$sevebDaysFromNow = 60 * 60 * 24 * 7;
$seventhStart = $startToday + $sevebDaysFromNow;
$seventhEnd = $seventhStart + 60 * 60 * 24;
$sql = "SELECT * FROM <table> WHERE the_date BETWEEN $seventhStart AND $seventEnd";

这将从您现在开始的7天开始计算。希望这有帮助

答案 1 :(得分:0)

SELECT * FROM `dbname1`.`test`
  WHERE 
    date(FROM_UNIXTIME(`the_date`)) = ADDDATE(DATE(NOW()), INTERVAL 7 DAY);

答案 2 :(得分:0)

这里有点兴趣,

  • 我使用curdate()获取当前日期,而不是DATETIME。
  • 我添加7天并转换为unix时间,这将产生当天的第二天
  • 我会在第二天做同样的事情
  • 我将where子句结构为&gt; =或等于目标日,但是&lt;第二天的开始。这提供了完全覆盖目标日的秒数范围。
  • 我不使用列本身的任何功能。这很重要,因为如果我这样做,mysql将不会是abl; e使用列上存在的任何索引来填充查询。

where the_date >= unix_timestamp(curdate() + interval 7 day)
  and the_date < unix_timestamp(curdate() + interval 8 day)