【问题标题】:Filter an array of dates (datetime) with GROQ (sanity) (React App)使用 GROQ (sanity) (React App) 过滤一组日期 (datetime)
【发布时间】:2023-03-29 19:15:01
【问题描述】:

我有一个可以多次放映的电影列表。我决定为用户提供为一部电影选择多个日期的选项(sanity studio 界面)。

电影的架构如下:

export default {
  name: 'movie',
  title: 'Movie',
  type: 'document',
  fields: [
    {
      name: 'title',
      title: 'Title',
      type: 'string'
    },
    {
      name: 'dates',
      title: 'Dates',
      type: 'array',
      of: [
        {
          type: 'datetime',
          options: {
            dateFormat: 'YYYY-MM-DD',
            timeFormat: 'HH:mm',
            timeStep: 15,
            calendarTodayLabel: 'Today'
          }
        }
      ]
    },
    {
      name: 'poster',
      title: 'Poster',
      type: 'image',
      options: {
        hotspot: true
      }
    },
    {
      name: 'body',
      title: 'Body',
      type: 'blockContent'
    }
  ],

  preview: {
    select: {
      title: 'title',
      date: 'date',
      media: 'poster'
    }
  }
}

当前查询:

const query = groq`*[_type == "movie"]{
  title,
  dates,
  poster,
  body
}`

我需要使用 GROQ 过滤日期数组中包含今天日期的电影

也许我过于复杂了,有人会想出更好的方法。

这个想法是为了避免数据库中的重复(一部电影可以放映 3-6 次)。这是我使用数组的唯一原因

【问题讨论】:

    标签: sanity groq


    【解决方案1】:

    解决方案应该是:

    const query = '*[_type == "movie" && dates match $today]{title, dates, poster, body}'
    const today = new Date().toISOString().split('T')[0]
    client.fetch(query, {today}).then(result => {
      // movies which are showing today
    })
    

    但是,字符串标记器中目前存在一个错误,该错误会削弱日期字符串匹配。与此同时,恐怕您唯一的选择是获取所有电影并过滤客户端。我们希望尽快解决此问题。

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 2020-08-25
      • 1970-01-01
      • 2022-06-11
      • 2022-01-25
      • 1970-01-01
      • 2012-06-03
      • 2011-06-10
      • 2021-08-30
      相关资源
      最近更新 更多