【问题标题】:How can I define Date data type in Graphql schema? [duplicate]如何在 Graphql 架构中定义日期数据类型? [复制]
【发布时间】:2020-05-05 17:38:24
【问题描述】:

我收到来自外部 API 的 LASTUPDATE: 1579443364 响应,
如何在架构中定义数据类型以将其转换为日期格式?

喜欢这种格式: 2020 年 1 月 19 日星期一 00:44:04

GraphQL 模式语言支持:

诠释
浮动
字符串
身份证
布尔

【问题讨论】:

  • 这不是一个日期,它是一个 Int
  • 是的,但我想将其转换成这种格式“ Mon Jan 19 2020 00:44:04 ”
  • 这与架构有什么关系呢?模式描述了 API,在这种情况下是一个 Int。如果你想解析它,例如以不同的方式存储它,这取决于 API 背后的代码。

标签: javascript node.js graphql graphql-js


【解决方案1】:

您可以使用将 Int 解析为日期的自定义标量 如果您使用的是 apollo 服务器,您可以尝试这样的操作

import { GraphQLScalarType } from 'graphql';
import { Kind } from 'graphql/language';

const resolverMap = {
  Date: new GraphQLScalarType({
    name: 'Date',
    description: 'Date custom scalar type',
    parseValue(value) {
      return new Date(value); // value from the client
    },
    serialize(value) {
      return value.getTime(); // value sent to the client
    },
    parseLiteral(ast) {
      if (ast.kind === Kind.INT) {
        return new Date(ast.value) // ast value is always in string format
      }
      return null;
    },
  }),
};

然后

scalar Date

type MyType {
   created: Date
}

您可以在这里仔细查看https://www.apollographql.com/docs/graphql-tools/scalars/ 这里有一些其他有用的标量https://github.com/Urigo/graphql-scalars

【讨论】:

    【解决方案2】:

    长答案:您应该定义一个标量类型来表示您的日期信息(如documentedanswered

    简短回答:您可以使用第 3 方库来照顾您(例如 https://www.npmjs.com/package/graphql-iso-date(您使用节点,所以这个应该适合您的需要)

    无论哪种方式,我都假设数值是时间戳,因此您应该使用resolve 函数将此数字转换为有效日期

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 2020-01-15
      • 2021-03-10
      • 2019-05-30
      • 2021-12-23
      • 2022-08-23
      • 2017-04-13
      • 2019-04-11
      • 2019-11-26
      相关资源
      最近更新 更多