无法在 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 中保存与 string
、number
和 timestamp
相同的数字。字符串或数字格式都不起作用,无论出于何种原因,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 页面 HTML
“无法读取未定义的属性‘节点’” - Gatsby/GraphQL/Prismic
使用 gatsby-source-graphql 时,GraphIQL 资源管理器未在 Gatsby 中显示