Kim*_*sen 3 date mongodb node.js graphql
我有一个 mongoDB 数据库,其中一个字段是 ISO 日期。当我使用 graphql(节点)查询查询表时,我可以正常接收我的对象,但是我在 graphql 中看到的日期格式是这种奇怪的格式:
"created": "Sun Nov 26 2017 00:55:35 GMT+0100 (CET)"
Run Code Online (Sandbox Code Playgroud)
如果我在解析器中写出该字段,则显示:
2017-11-25T23:55:35.116Z
Run Code Online (Sandbox Code Playgroud)
如何更改日期格式,以便在 graphiql 中显示 ISO 日期?
该字段只是在我的数据类型中声明为字符串。
编辑 我的简单类型定义为:
type MyString {
_id: String
myString: String
created: String
}
Run Code Online (Sandbox Code Playgroud)
当我在创建的基础中插入一个值时,MongoDB 会自动设置。
当我运行查询时,它返回一个对象数组。在我的解析器(用于检查)中,我执行以下操作:
getStrings: async (_, args) => {
let myStrings = await MyString.find({});
for (var i = 0; i < myStrings.length; i++) {
console.log(myStrings[i]["created"]);
}
return myStrings;
}
Run Code Online (Sandbox Code Playgroud)
返回数组中的所有对象创建日期都具有以下形式:
2017-11-25T23:55:35.116Z
Run Code Online (Sandbox Code Playgroud)
但是当我在 GraphIql 中看到它时,它显示为:
"created": "Sun Nov 26 2017 00:55:35 GMT+0100 (CET)"
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么它会改变格式?
由于我的模型将其定义为字符串,因此不应对其进行操作,而应仅保留格式。但事实并非如此。这让我很困惑。
金
在您的解析器中,只需使用返回一个格式化的字符串 toISOString()
const date1 = new Date('2017-11-25T23:45:35.116Z').toISOString();
console.log({date1});
// => { date1: '2017-11-25T23:45:35.116Z' }
const date2 = new Date('Sun Nov 26 2017 00:55:35 GMT+0100 (CET)').toISOString();
console.log({date2})
// => { date2: '2017-11-25T23:55:35.000Z' }
Run Code Online (Sandbox Code Playgroud)
Mongo 不会将日期存储为字符串。它将日期存储为 Unix 纪元(又名 Unix 时间,又名 POSIX 时间),这是自1970年1 月 1 日以来经过的秒数,不计算闰秒(在 ISO 8601 中:1970-01-01T00:00:00Z )。由于您的数据模型请求一个字符串,因此它将使用toString()
const date1 = new Date('2017-11-25T23:45:35.116Z').toString();
console.log({date1})
// => { date1: 'Sat Nov 25 2017 15:45:35 GMT-0800 (PST)' }
Run Code Online (Sandbox Code Playgroud)
这应该会为您阐明行为,但您可能真正想要做的是更改您的模型,以便将created其正确键入为Date. 你可以通过几种方式做到这一点。
| 归档时间: |
|
| 查看次数: |
21744 次 |
| 最近记录: |