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

时间:2019-07-17 14:27:15

标签: mysql date laravel-5 eloquent date-range

我正在创建一个基本的Zodiac Signs应用程序,但在这个问题上遇到了麻烦。 基本上,我只想检查今天是否属于mysql表中的特定日期范围。

注意(IGNORE THE YEAR2019。为方便查询,我刚刚添加了它) 这是我的桌子: 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       |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以尝试其他逻辑来查找用户的十二生肖。该方法可能是这样的,假设用户的生日是12月25日。因此,使用数据库检查月份(十二月),可以是SagittariusCapricorn。然后检查Day(25),因为day> 22,则十二生肖将为Capricorn

如果我分成几步,

  1. 仅将范围设置为月和日,不添加年份。检查
  2. 用户月份的第一个月,然后找出哪两个可以作为他/她的签收支票
  3. 查看日期以完成决定

您可以尝试使用其他表结构来适应这种方法。

答案 2 :(得分:0)

快速而懒惰的解决方案是两次添加摩ri座。一次是今年年初的一部分(从2018年开始),一次是年底的一部分(到2020年结束)。如果不希望黄道十二宫出现两次,则需要更新查询以使其特殊情况下的跨年线十二生肖。

相关问题