Php 仅显示数据库中超过两个月的条目

Php 仅显示数据库中超过两个月的条目,php,mysql,timestamp,Php,Mysql,Timestamp,我的数据库中有unix时间戳。现在我只想得到两个月前的结果 这不起作用,因为它显示的条目超过两个月 $unixbefore2months = strtotime('-2 month'); $query = 'SELECT * FROM table WHERE time > "'.$unixbefore2months.'"'; 因此,我有时间戳来确定两个月前(从现在开始)的时间,以及数据库中的条目及其创建时间。使用UNIX\u TIMESTAMP()来转换它们,如果使用本机MySQLDAT

我的数据库中有unix时间戳。现在我只想得到两个月前的结果

这不起作用,因为它显示的条目超过两个月

$unixbefore2months = strtotime('-2 month');
$query = 'SELECT * FROM table WHERE time > "'.$unixbefore2months.'"';
因此,我有时间戳来确定两个月前(从现在开始)的时间,以及数据库中的条目及其创建时间。

使用
UNIX\u TIMESTAMP()
来转换它们,如果使用本机MySQL
DATE\u SUB()
函数,则可以在没有任何PHP变量的情况下进行转换:

SELECT * FROM tbl WHERE time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 MONTH));
有关
UNIX\u TIMESTAMP()
DATE\u SUB()
使用
UNIX\u TIMESTAMP()
转换它们的详细信息,如果使用本机MySQL
DATE\u SUB()
函数,则无需任何PHP变量即可完成转换:

SELECT * FROM tbl WHERE time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 MONTH));
有关
UNIX\u TIMESTAMP()
DATE\u SUB()

的详细信息,请参阅参考资料。该学习一些调试了

问这样的问题是毫无用处的。
唯一能帮助你的人其实就是你自己

所以,你必须学会一些技巧

  • 始终验证您的变量。
    UnixBefor2个月包含哪些内容?你必须有一个好主意。验证它:
    echo日期(“Y-m-d”,Unixbefor2个月)
    $query包含什么?你必须有一个好主意。验证它:
    echo$query在控制台中运行此查询
  • 验证您的数据。
    字段类型是什么?
    desc table
    query说了什么?
    表中有时间戳吗?
    它们是什么 听着,除了你,没有人能回答这些问题。然而,有了答案,您将很容易发现问题

    是时候学习一些调试了

    问这样的问题是毫无用处的。
    唯一能帮助你的人其实就是你自己

    所以,你必须学会一些技巧

  • 始终验证您的变量。
    UnixBefor2个月包含哪些内容?你必须有一个好主意。验证它:
    echo日期(“Y-m-d”,Unixbefor2个月)
    $query包含什么?你必须有一个好主意。验证它:
    echo$query在控制台中运行此查询
  • 验证您的数据。
    字段类型是什么?
    desc table
    query说了什么?
    表中有时间戳吗?
    它们是什么
    听着,除了你,没有人能回答这些问题。然而,有了答案,你会很容易地发现问题

    echo$unixbefor2个月给出1323272062<代码>回送日期(“Y-m-d”,2个月前$unix)给出2011-12-07<代码>echo$查询给出
    从tbl中选择*,其中时间>1323272062
    。时间是一个varchar(50),它包含像
    1302689069
    这样的字符串。除了
    $query
    之外,我之前已经验证了所有内容。我想我在比较字符串时犯了一个错误。。。但现在它似乎起作用了。我不知道我改变了什么。嗯,它也发生了。无论如何,您必须在INT字段中存储unix时间戳,而不是varchar。您能解释一下区别吗?为什么INT更好?是因为它可以存储更多的值吗?这不是很明显吗?1302689069是一个整数,mysql的字段类型正好适用于此。为什么不使用它?
    echo$unixbefor2个月给出1323272062<代码>回送日期(“Y-m-d”,2个月前$unix)给出2011-12-07<代码>echo$查询给出
    从tbl中选择*,其中时间>1323272062
    。时间是一个varchar(50),它包含像
    1302689069
    这样的字符串。除了
    $query
    之外,我之前已经验证了所有内容。我想我在比较字符串时犯了一个错误。。。但现在它似乎起作用了。我不知道我改变了什么。嗯,它也发生了。无论如何,您必须在INT字段中存储unix时间戳,而不是varchar。您能解释一下区别吗?为什么INT更好?是因为它可以存储更多的值吗?这不是很明显吗?1302689069是一个整数,mysql的字段类型正好适用于此。为什么不使用它呢?