如何查询日期范围在盖茨比graphql?

问题描述 投票:2回答:1

所以,我在graphql此查询。但大于(GT)和小于(LT)是不是一个定义的字段。

query Test {
  allStrapiEvent(filter:{date:{gt:"02/13/2019"}}){
    edges{
      node{
        name
        date(formatString:"MM/DD/YYYY")
      }
    }
  } 
}
graphql gatsby
1个回答
2
投票

它看起来像dateString类型的,因此没有得到比较运算符(GT,LT,GTE,LTE);这是一种耻辱,因为这是非常有用的。

我觉得作为一个解决方法,您可以添加额外的场像timestamp并存储在数日(如果尚未由CMS提供)。然后你就可以对他们使用比较操作符。

// moment.js comes with gatsby
const moment = require('moment');

exports.onCreateNode = ({ node, actions }) => {
  const { createNodeField } = actions

  // I'm guessing your type is StrapiEvent, but it could be st else
  if (node.internal.type === `StrapiEvent`) {
    const date = node.date;

    createNodeField({
      name: 'timestamp',
      node,
      // convert date to unix timestamp & convert to number
      value: +moment(date).format('X'),
    })
  }
}

然后说,你想从昨天起事件。你可以得到UNIX时间戳像moment().subtract(1, 'day').format('X') // 1549044285

query Test {
  allStrapiEvent(filter: {
    fields: {
      timestamp: {
        gt: 1549044285
      }
    }
  }) {
    edges{
      node{
        name
        date(formatString:"MM/DD/YYYY")
      }
    }
  } 
}

不理想,但会奏效。

© www.soinside.com 2019 - 2024. All rights reserved.