首页 > 解决方案 > 如何检查php和sql中两个日期之间的日期?

问题描述

我发送参数 date 来检查数据库中两个日期之间的日期。我发送到 API 的示例日期字符串参数是“09/01/2020”,格式为 mm/dd/YYYY

此格式对于数据库表列中的日期字符串也相同。

现在在数据库中,我将 date_start 设置为“08/21/2020”,将 date_end 设置为“09/05/2020”

我的代码是:

$date = $data["date"];

获取我发送到 API 的日期字符串参数。

示例表名是促销,我的代码是:

$sql = "SELECT * FROM promo WHERE STR_TO_DATE('" . $date . "', '%M%M/%d%d/%Y%Y%Y%Y') 
between date_start and date_end";

但我没有得到它。如何纠正它以获得它?

编辑我的最新代码是这样的但仍然没有得到它:

$date = $data["date"];
$date = DateTime::createFromFormat('m/d/Y', $date);
$date = $date->format('m/d/Y');
$sql = "SELECT * FROM promo WHERE $date BETWEEN STR_TO_DATE(date_start, '%m/%d/%Y') AND
            STR_TO_DATE(date_end, '%m/%d/%Y')";

标签: phpmysqlsql

解决方案


你说:

现在在数据库中,我将 date_start 设置为“08/21/2020”,将 date_end 设置为“09/05/2020”

这不是最佳实践,您应该始终在 MySQL 中将日期存储为正确的日期或日期时间类型。如果你这样做了,你只需要在查询中进行范围比较:

SELECT *
FROM promo
WHERE ? BETWEEN date_start and date_end;

如果您必须坚持当前的设计,那么您实际上必须STR_TO_DATE在开始日期和结束日期使用:

SELECT *
FROM promo
WHERE ? BETWEEN STR_TO_DATE(date_start, '%m/%d/%Y') AND
                STR_TO_DATE(date_end, '%m/%d/%Y');

对于?上面的占位符,你应该绑定一个有效的 PHP 日期,或者一个有效的 MySQL 日期字符串。但同样,我强烈建议修复设计问题。


推荐阅读