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

Posted

技术标签:

【中文标题】如何在 gatsby graphql 中查询日期范围?【英文标题】:How to query date range in gatsby graphql? 【发布时间】:2019-06-25 16:42:11 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

看起来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'),
    )
  

然后说你想要从昨天开始的事件。你可以得到像moment().subtract(1, 'day').format('X') // 1549044285这样的unix时间戳

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

不理想,但会起作用。

【讨论】:

我遇到了类似的问题,但需要稍微调整一下我转换日期的方式:value: moment.unix(time_updated).format(),

以上是关于如何在 gatsby graphql 中查询日期范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gatsby 中对 GraphQL 查询进行单元测试

如何使用 gatsby-source-prismic 在 graphql 中执行嵌套查询

如何在带有 gatsby 的 graphql 查询中使用正则表达式

如何访问 Gatsby 中“file”或“allFiles”GraphQL 查询返回的文件的文本内容?

如何使用 Graphql 从 Strapi 查询 Gatsby 中的多个图像

无法在 Gatsby 站点的 GraphQL 中格式化日期