22

我用谷歌搜索并尝试了几种比较日期的方法,但不幸的是没有得到预期的结果。我目前的记录状态如下:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data;

              +-----------------------------------------+
              | date_format(date(starttime),'%d-%m-%Y') |
              +-----------------------------------------+
              | 28-10-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 03-11-2012                              |
              | 03-11-2012                              |
              | 07-11-2012                              |
              | 07-11-2012                              |

我想比较日期,因此这样做:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
               +-----------------------------------------+
               | date_format(date(starttime),'%d-%m-%Y') |
               +-----------------------------------------+
               | 28-10-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 03-11-2012                              |
               | 03-11-2012                              |
               | 07-11-2012                              |
               | 07-11-2012                              |

我认为结果不应该包括“28-10-2012”。有什么建议吗?提前致谢。

4

3 回答 3

43

您的格式从根本上不是一个可排序的格式 - 您正在比较strings,并且字符串 "28-10-2012"大于"02-11-2012"。

相反,您应该将日期作为 dates进行比较,然后仅将它们转换为您的目标格式以供输出。

试试这个:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

(根据文档,输入必须始终采用年月值形式。)

请注意,如果starttime是一个DATETIME字段,您可能需要考虑更改查询以避免重复转换。(优化器可能足够聪明,可以避免它,但值得检查。)

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

(请注意,将日期格式化为d-m-Y开头是不寻常的 - 通常使用 ISO-8601 标准等会更好y-M-d。但是,上面的代码可以满足您在问题中的要求。)

于 2012-11-22T07:25:25.990 回答
2

使用 2012-11-02 而不是 02-11-2012,您将不再需要 date_format()

于 2012-11-22T07:36:03.683 回答
0

使用以下方法:

public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
  return round(abs(strtotime($date1)-strtotime($date2))/86400);
}  
/* end function dateDiff */

我会帮你的!

于 2016-10-03T11:58:36.550 回答