如果我检查日期 2019-01-12 是否在 12 月到 1 月的日期范围内,查询将给出空结果

Query gives empty result if I check whether the date 2019-01-12 falls with in a December to January date range

我正在创建一个基本的 Zodiac signs 应用程序,但我遇到了这个问题。 基本上,我只想检查今天是否在 mysql table.

中的特定日期范围内

注意(请忽略 2019 年。我只是为了查询方便而添加的) 这是我的 table: 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       |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+

也许您的意思是 from_date 是 2018-12-22,而不是 2019-12-22? (或者 to_date 应该是 2020 年。你懂的。N 年 12 月和 N+1 年 1 月)。

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

如果我分解成步骤,

  1. 只设置月和日的范围,不添加年。检查
  2. 首先是用户的月份,然后找出哪两个可以是 his/her 签名检查
  3. 检查最终决定的日期

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

快速而懒惰的解决方案是添加两次摩羯座。一次是年初的一部分(从 2018 年开始),一次是年底的一部分(到 2020 年结束)。如果不想让生肖出现两次,您需要将查询更新为 special-case 跨年线的生肖。