0

我有一个对象“业务”,我正在尝试在GraphQL中对其进行模式化。由于 Graphql 上默认不提供 DateTime 和 Time,因此我遇到了以下库:github

业务.graphql

type Business {
    businessId: ID!
    name: String!
    createdAt: Date!
    closeHour: Time
}

不幸的是,图书馆只提供了一个日期时间。如何仅将“时间”(即 15:00 或 09:45)用于 closeHour 属性?有没有其他图书馆可以提供帮助?

4

1 回答 1

0

“日期”和“日期时间”可能很棘手。例如,“15:00”是太平洋时间下午 3:00?

许多(大多数)实现通过将“日期时间”存储为相对于某个“纪元”的大整数来解决问题。例如,“0”可能表示“自 1970 年 1 月 1 日以来的秒数”。

也许您可能会考虑将 GraphQL“DateTime”存储为 ISO 8601 字符串,或使用此模块:https ://www.npmjs.com/package/graphql-iso-date


在“模式”级别(相对于 JS 代码,正如我上面建议的那样),您可能会考虑这个:

GraphQL 规范

3.5 标量:

标量 ScalarType 定义 说明 optscalarNameDirectivesConstopt 标量类型表示 GraphQL 类型系统中的原始叶值。GraphQL 响应采用分层树的形式;这些树上的叶子是 GraphQL 标量。

所有 GraphQL 标量都可以表示为字符串,尽管根据所使用的响应格式,给定的标量类型可能有更合适的原语,并且服务器应该在适当的时候使用这些类型。

GraphQL 提供了许多内置的标量,但类型系统可以添加具有语义含义的附加标量。例如,一个 GraphQL 系统可以定义一个称为 Time 的标量,虽然它被序列化为一个字符串,但它承诺符合 ISO-8601。当查询时间类型的字段时,您可以依靠使用 ISO-8601 解析器解析结果并使用客户端特定原语来获取时间的能力。

于 2020-04-21T23:49:22.807 回答