首页 > 解决方案 > 如果我检查日期 2019-01-12 是否在 12 月到 1 月的日期范围内,查询会给出空结果

问题描述

我正在创建一个基本的十二生肖应用程序,但我遇到了这个问题。基本上,我只想检查今天是否在 mysql 表中的特定日期范围之间。

注意(忽略 2019 年。为了方便查询,我只是添加了它)这是我的表: Zodia Signs Table

 $date = "2019-03-09"
    $zodiacSign =   DB::table('zodiac_signs')
        ->where(function ($query) use($date){
            $query->where('from_date', '<=', $date)
                  ->where('to_date', '>=', $date);
        })->get();

除了 2019-12-22 和 2019-01-19 之间的日期之外的每个日期都按预期工作。我在这里做错了什么?

+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
| id  |    name      |      symbol       |    icon     | from_date   |  to_date    |     description      |     created_at       |     updated_at       | deleted_at |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
|  2  | Aries        | The Ram           | NULL        | 2019-03-21  | 2019-04-19  |                      | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  3  | Taurus       | The Bull          | NULL        | 2019-04-20  | 2019-05-20  |                      | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  4  | Gemini       | The Twins         | NULL        | 2019-05-21  | 2019-06-20  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  5  | Cancer       | The Crab          | NULL        | 2019-06-21  | 2019-07-22  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  6  | Leo          | The Lion          | NULL        | 2019-07-23  | 2019-08-22  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  7  | Virgo        | The Virgin        | NULL        | 2019-08-23  | 2019-09-22  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  8  | Libra        | The Scales        | NULL        | 2019-09-23  | 2019-10-22  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
|  9  | Scorpio      | The Scorpion      | NULL        | 2019-10-23  | 2019-11-21  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
| 10  | Sagittarius  | The Archer        | NULL        | 2019-11-22  | 2019-12-21  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
| 11  | Capricorn    | The Goat          | NULL        | 2019-12-22  | 2019-01-19  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
| 12  | Aquarius     | The Water Bearer  | NULL        | 2019-01-20  | 2019-02-18  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
| 13  | Pisces       | The Fishes        | NULL        | 2019-02-19  | 2019-03-20  | NULL                 | 2019-07-17 03:09:07  | 2019-07-17 03:09:07  | NULL       |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+

标签: mysqldatelaravel-5eloquentdate-range

解决方案


您可以尝试不同的逻辑来查找用户的星座。该方法可能是这样的,假设用户的出生日期是 12 月 25 日。因此使用您的数据库检查月份(12 月),它可能是SagittariusCapricorn。然后检查天 (25),因为天 > 22,那么十二生肖将是Capricorn

如果我分解成步骤,

  1. 仅设置月份和日期的范围,不要添加年份。检查
  2. 首先是用户的月份,然后找出哪两个可能是他/她的签名检查
  3. 检查日期以完成决定

您可以尝试使用不同的表结构来适应这种方法。


推荐阅读