Strapi. Io Filter Data by Date

I'm trying to deep filter API response from Strapi backend from a custom controller with entityService, but seems like I'm doing something wrong.

According to the documentation: Strapi filter data

I can have multiple conditions there.

  • Strapi Version: 4.0.0
  • Operating System: macOS
  • Database: postgresql 14
  • Node Version: v14.17.6
  • NPM Version: 7.21.1
  • Yarn Version: 1.22.17

My controller code:

    "use strict";

/**
 *  occasion controller
 */

const { createCoreController } = require("@strapi/strapi").factories;
const date = new Date().toLocaleString("en-US", {
  timeZone: "America/Los_Angeles",
});

const dateClean = date.slice(0, 10).split("/");

const dateISOCompat = [dateClean[2], dateClean[0], dateClean[1]].join("-");

module.exports = createCoreController(
  "api::occasion.occasion",
  ({ strapi }) => ({
    async find(ctx) {
      const { query } = ctx.params;

      const entity = await strapi.entityService.findMany(
        "api::occasion.occasion",
        {
          ...query,
          populate: {
            image: true,
            button: true,
            category: true,
          },
          filters: {
            $and: [
              {
                publishedAt: {
                  $notNull: true,
                },
                $and: [
                  {
                    category: {
                      startDate: {
                        $lt: dateISOCompat,
                      },
                    },
                    category: {
                      endDate: {
                        $gt: dateISOCompat,
                      },
                    },
                  },
                ],
              },
            ],
          },
        }
      );
      return entity;
    },
  })
);

Date comparison should work I think, my assumption that something wrong with the syntax of filter deep nested conditions.

I still can get data from the API endpoint, but it didn't check for the date range...

My response looks like this:

[
{
    "id": 1,
    "title": "Are you choosing a cake for the most important event in your life?",
    "subtitle": "",
    "createdAt": "2021-12-09T23:49:24.518Z",
    "updatedAt": "2021-12-30T20:59:28.264Z",
    "publishedAt": "2021-12-30T20:59:28.261Z",
    "image": {
        "id": 10,
        "name": "WeddingDate.jpg",
        "alternativeText": "WeddingDate.jpg",
        "caption": "WeddingDate.jpg",
        "width": 2000,
        "height": 1335,
        "formats": {
            "large": {
                "ext": ".jpg",
                "url": "/uploads/large_Wedding_Date_6c9d20762c.jpg",
                "hash": "large_Wedding_Date_6c9d20762c",
                "mime": "image/jpeg",
                "name": "large_WeddingDate.jpg",
                "path": null,
                "size": 125.61,
                "width": 1000,
                "height": 668
            },
            "small": {
                "ext": ".jpg",
                "url": "/uploads/small_Wedding_Date_6c9d20762c.jpg",
                "hash": "small_Wedding_Date_6c9d20762c",
                "mime": "image/jpeg",
                "name": "small_WeddingDate.jpg",
                "path": null,
                "size": 43.24,
                "width": 500,
                "height": 334
            },
            "medium": {
                "ext": ".jpg",
                "url": "/uploads/medium_Wedding_Date_6c9d20762c.jpg",
                "hash": "medium_Wedding_Date_6c9d20762c",
                "mime": "image/jpeg",
                "name": "medium_WeddingDate.jpg",
                "path": null,
                "size": 79.71,
                "width": 750,
                "height": 501
            },
            "thumbnail": {
                "ext": ".jpg",
                "url": "/uploads/thumbnail_Wedding_Date_6c9d20762c.jpg",
                "hash": "thumbnail_Wedding_Date_6c9d20762c",
                "mime": "image/jpeg",
                "name": "thumbnail_WeddingDate.jpg",
                "path": null,
                "size": 12.95,
                "width": 234,
                "height": 156
            }
        },
        "hash": "Wedding_Date_6c9d20762c",
        "ext": ".jpg",
        "mime": "image/jpeg",
        "size": 383.44,
        "url": "/uploads/Wedding_Date_6c9d20762c.jpg",
        "previewUrl": null,
        "provider": "local",
        "provider_metadata": null,
        "createdAt": "2021-12-09T19:34:37.053Z",
        "updatedAt": "2021-12-09T19:34:37.053Z"
    },
    "button": {
        "id": 1,
        "text": "Order Now",
        "buttonURL": "/products/",
        "style": "Fill"
    },
    "category": {
        "id": 1,
        "name": "Regular Occasions",
        "startDate": "2022-01-01",
        "endDate": "2024-12-31",
        "createdAt": "2021-12-09T23:49:59.083Z",
        "updatedAt": "2021-12-09T23:56:21.637Z",
        "publishedAt": "2021-12-09T23:55:11.891Z"
    }
},
{
    "id": 2,
    "title": "Make your birthday unforgettable and bright!",
    "subtitle": "",
    "createdAt": "2021-12-09T23:53:15.734Z",
    "updatedAt": "2021-12-22T22:06:15.962Z",
    "publishedAt": "2021-12-09T23:54:55.136Z",
    "image": {
        "id": 3,
        "name": "birthday_hero.jpg",
        "alternativeText": "birthday_hero.jpg",
        "caption": "birthday_hero.jpg",
        "width": 1600,
        "height": 1066,
        "formats": {
            "large": {
                "ext": ".jpg",
                "url": "/uploads/large_birthday_hero_af457271ec.jpg",
                "hash": "large_birthday_hero_af457271ec",
                "mime": "image/jpeg",
                "name": "large_birthday_hero.jpg",
                "path": null,
                "size": 56.99,
                "width": 1000,
                "height": 666
            },
            "small": {
                "ext": ".jpg",
                "url": "/uploads/small_birthday_hero_af457271ec.jpg",
                "hash": "small_birthday_hero_af457271ec",
                "mime": "image/jpeg",
                "name": "small_birthday_hero.jpg",
                "path": null,
                "size": 20.62,
                "width": 500,
                "height": 333
            },
            "medium": {
                "ext": ".jpg",
                "url": "/uploads/medium_birthday_hero_af457271ec.jpg",
                "hash": "medium_birthday_hero_af457271ec",
                "mime": "image/jpeg",
                "name": "medium_birthday_hero.jpg",
                "path": null,
                "size": 37.06,
                "width": 750,
                "height": 500
            },
            "thumbnail": {
                "ext": ".jpg",
                "url": "/uploads/thumbnail_birthday_hero_af457271ec.jpg",
                "hash": "thumbnail_birthday_hero_af457271ec",
                "mime": "image/jpeg",
                "name": "thumbnail_birthday_hero.jpg",
                "path": null,
                "size": 6.63,
                "width": 234,
                "height": 156
            }
        },
        "hash": "birthday_hero_af457271ec",
        "ext": ".jpg",
        "mime": "image/jpeg",
        "size": 108.92,
        "url": "/uploads/birthday_hero_af457271ec.jpg",
        "previewUrl": null,
        "provider": "local",
        "provider_metadata": null,
        "createdAt": "2021-12-09T19:34:35.479Z",
        "updatedAt": "2021-12-09T19:34:35.479Z"
    },
    "button": {
        "id": 2,
        "text": "Order Now",
        "buttonURL": "/products/",
        "style": "Fill"
    },
    "category": {
        "id": 1,
        "name": "Regular Occasions",
        "startDate": "2022-01-01",
        "endDate": "2024-12-31",
        "createdAt": "2021-12-09T23:49:59.083Z",
        "updatedAt": "2021-12-09T23:56:21.637Z",
        "publishedAt": "2021-12-09T23:55:11.891Z"
    }
},
{
    "id": 3,
    "title": "How to Express Words of Love on Father's Day?",
    "subtitle": "",
    "createdAt": "2021-12-10T00:01:49.722Z",
    "updatedAt": "2021-12-22T22:06:10.665Z",
    "publishedAt": "2021-12-10T00:13:18.089Z",
    "image": {
        "id": 15,
        "name": "FathersDay.jpg",
        "alternativeText": "FathersDay.jpg",
        "caption": "FathersDay.jpg",
        "width": 1600,
        "height": 664,
        "formats": {
            "large": {
                "ext": ".jpg",
                "url": "/uploads/large_Fathers_Day_7020aae6a3.jpg",
                "hash": "large_Fathers_Day_7020aae6a3",
                "mime": "image/jpeg",
                "name": "large_FathersDay.jpg",
                "path": null,
                "size": 22.33,
                "width": 1000,
                "height": 415
            },
            "small": {
                "ext": ".jpg",
                "url": "/uploads/small_Fathers_Day_7020aae6a3.jpg",
                "hash": "small_Fathers_Day_7020aae6a3",
                "mime": "image/jpeg",
                "name": "small_FathersDay.jpg",
                "path": null,
                "size": 8.88,
                "width": 500,
                "height": 208
            },
            "medium": {
                "ext": ".jpg",
                "url": "/uploads/medium_Fathers_Day_7020aae6a3.jpg",
                "hash": "medium_Fathers_Day_7020aae6a3",
                "mime": "image/jpeg",
                "name": "medium_FathersDay.jpg",
                "path": null,
                "size": 15.33,
                "width": 750,
                "height": 311
            },
            "thumbnail": {
                "ext": ".jpg",
                "url": "/uploads/thumbnail_Fathers_Day_7020aae6a3.jpg",
                "hash": "thumbnail_Fathers_Day_7020aae6a3",
                "mime": "image/jpeg",
                "name": "thumbnail_FathersDay.jpg",
                "path": null,
                "size": 3.45,
                "width": 245,
                "height": 102
            }
        },
        "hash": "Fathers_Day_7020aae6a3",
        "ext": ".jpg",
        "mime": "image/jpeg",
        "size": 41.41,
        "url": "/uploads/Fathers_Day_7020aae6a3.jpg",
        "previewUrl": null,
        "provider": "local",
        "provider_metadata": null,
        "createdAt": "2021-12-10T00:13:06.981Z",
        "updatedAt": "2021-12-10T00:13:06.981Z"
    },
    "button": {
        "id": 3,
        "text": "Order Now",
        "buttonURL": "/products/",
        "style": "Fill"
    },
    "category": {
        "id": 3,
        "name": "Father's Day",
        "startDate": "2022-06-01",
        "endDate": "2022-06-19",
        "createdAt": "2021-12-10T00:03:52.295Z",
        "updatedAt": "2021-12-10T00:03:53.286Z",
        "publishedAt": "2021-12-10T00:03:53.283Z"
    }
}

.........

Alexander Ross

Alexander Ross

Gaming, Esports & Interactive Media Writer

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.

Share this article