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

Posted

技术标签:

【中文标题】无法在 Gatsby 站点的 GraphQL 中格式化日期【英文标题】:Can't Format Date in GraphQL in Gatsby Site 【发布时间】:2020-04-16 03:21:22 【问题描述】:

我在 Gatsby 中格式化日期时遇到问题。我从firestore获取了一些数据。我找到的字段之一称为datePublished,它包含一个时间戳形式的数字(例如,1576945502000)。确实,它确实是一个时间戳,但它以number 格式类型保存到了firestore。

现在,我想使用 graphql 中的 formatString 函数来格式化 datePublished 字段——如下所述:https://www.gatsbyjs.org/docs/graphql-reference/#dates

但我无法让格式正常工作。无论我尝试在 graphiql 中还是在我的网站上格式化字符串,它都不起作用。这是我尝试过的代码:

query MyQuery 
  allNewsFeed 
    edges 
      node 
        published(formatString:"dddd Mo, YYYY")
      
    
  

这是我在 graphiql 中收到的错误消息:

未知参数“'NewsFeed' 类型的字段 'datePublished' 上的格式字符串。

如果我再深入一点,我注意到 firestore 中的字段类型被列为 number,而在 graphiql 文档资源管理器中它被列为 FloatQueryOperatorInput

此外,我做了一个小实验,尝试在 firestore 中保存与 stringnumbertimestamp 相同的数字。字符串或数字格式都不起作用,无论出于何种原因,gatsby-firesource 插件都不会使用timestamp 格式拉入该字段。

所以我想知道,我该怎么做才能让它在 gatsby 中工作?

有什么想法吗?

谢谢。

【问题讨论】:

我不完全确定,但您似乎必须自定义 GraphQL 架构才能在 published 字段上启用 formatString 【参考方案1】:

我遇到了类似的情况,盖茨比在日期字段上不接受“formatString”,对我来说,解决问题的方法是将字段的格式更改为 YYYY-MM-DD,因此它从 02 06 2017 变为 2017-06-02 和盖茨比得到了该字段代表日期的提示。 看起来 gatsby 会“读取”数据并猜测类型,并据此获得某些功能。

由于 gatsby 使用 moment.js,我猜YYYY-MM-DD 格式被它采用了。

我正在使用 MDX,因此更改日期字段的格式对我来说真的很容易,因为它只是纯文本,我不确定您是否拥有与 firestore 相同的奢侈,但我希望这至少能给您一些尝试的想法。祝你好运!

【讨论】:

以上是关于无法在 Gatsby 站点的 GraphQL 中格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 仅返回 Gatsby 站点上的第一个节点

如何在 graphQL 中获取 Gatsby 页面 HTML

“无法读取未定义的属性‘节点’” - Gatsby/GraphQL/Prismic

使用 gatsby-source-graphql 时,GraphIQL 资源管理器未在 Gatsby 中显示

如何让 Drupal 8 视图与 GraphQL / Gatsby.js 一起使用

GraphQL 检索特定块的数据 - Gatsby + Wordpress