php - 如何检查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')";
解决方案
你说:
现在在数据库中,我将 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 日期字符串。但同样,我强烈建议修复设计问题。
推荐阅读
- meta - 如何更新元属性?
- javascript - requestFullscreen is not returning a promise
- javascript - 如何在 angular/ionic 中使用 httpclient 上传文件
- html - 将弹性项目作为弹性容器是不好的做法吗?
- java - 使用休眠 JPA 和 sql server 如何映射唯一标识符?
- php - PHP Docker 安装 php7-mysql
- algorithm - String S 中需要更改的最小字符数的算法
- javascript - OpenCV.js 安装错误:
- java - MockMvc、RestAssured 和 TestRestTemplate 有什么区别?
- javascript - 使用 webback 发出源地图后无法在 chrome 中看到源代码