如何在Gatsby graphql中查询日期范围?

时间:2019-02-01 06:12:24

标签: graphql gatsby

所以我在graphql中有此查询。但是大于(gt)和小于(lt)不是一个定义的字段。

query Test {
  allStrapiEvent(filter:{date:{gt:"02/13/2019"}}){
    edges{
      node{
        name
        date(formatString:"MM/DD/YYYY")
      }
    }
  } 
}

1 个答案:

答案 0 :(得分:2)

看起来Stringtimestamp类型的,因此没有获取比较运算符(gt,lt,gte,lte);真可惜,因为这确实有用。

我认为,作为一种解决方法,您可以添加其他字段,例如// 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'), }) } } 并以数字形式存储日期(如果CMS尚未提供)。然后,您可以对它们使用比较运算符。

moment().subtract(1, 'day').format('X')

然后说您想从昨天开始进行活动。您可以像query Test { allStrapiEvent(filter: { fields: { timestamp: { gt: 1549044285 } } }) { edges{ node{ name date(formatString:"MM/DD/YYYY") } } } } // 1549044285

一样获得Unix时间戳。
ThreadPool

不太理想,但是可以使用。