首页 > 解决方案 > value.getTime 不是函数 GraphQL 自定义标量日期

问题描述

我收到来自外部 API 的 LASTUPDATE: 1579452599 响应,

我想以这种格式解析值:2020 年 1 月 19 日星期一 13:44:04,我尝试使用自定义标量,但出现此错误:

value.getTime 不是函数

在此处输入图像描述

我究竟做错了什么?

这是我的代码,

解析器.js

import fetch from 'node-fetch';
import { GraphQLScalarType } from 'graphql';
import { Kind } from 'graphql/language';

export const resolvers = {
  Query: {
    getCrypto: async() => {
      const response = await fetch('https://min-api.cryptocompare.com/data/top/totalvolfull?limit=10&tsym=USD&api_key=260d15e639be7b967c2b0e4f9f3b6d656897ccbdfe772b1d24818d9f96d3a6ed')

      let data = await response.json()
      return data.Data[0].RAW.USD;

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

架构.graphql

type CryptoCurrency {
  FROMSYMBOL: String
  PRICE: Float
  TOSYMBOL: String  
  LASTUPDATE: Date
}

type Query {
  getCrypto: CryptoCurrency
}

scalar Date
type MyType {
   created: Date
}


在控制台中我看到了价值 在此处输入图像描述

标签: javascriptnode.jsgraphqlgraphql-js

解决方案


万一其他人从谷歌搜索类似的问题来到这里
你应该 LASTUPDATE从时间戳转换为实际日期,并且必须乘以 1000,因为 Javascript 使用毫秒。

   serialize(value) {
                console.log( new Date(value).toISOString())
                return new Date(value * 1000).toISOString(); // value sent to the client
            }

推荐阅读