Mongoose 返回日期字符串

问题描述 投票:0回答:2

猫鼬模型:

const patientSchema = new mongoose.Schema({
    firstName: String,
    middleName: String,
    lastName: String,
    addresses: [addressSubschema],
    dateOfBirth: Date,
    files: [{ type: mongoose.Schema.Types.ObjectId, ref: 'File' }],
    policies: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Policy' }],
    claims: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Claim' }],
    authorizations: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Authorization' }],
    statements: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Statement' }],
    documents: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Document' }],
    notes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Note' }]
}, { timestamps: true })

我使用 React 前端和标准 Node.js/Express 后端。创建新患者后,出生日期将作为字符串存储在文档中,如下所示:

1990-05-05T00:00:00.000+00:00

当我查询此文件并尝试显示日期时,最初允许我准确地显示日期:

<p className="card-text">{props.data.dateOfBirth}</p>

React 通常不会让你直接在屏幕上打印对象,所以我立刻就知道这是一个字符串而不是日期对象

原始格式当然对用户不友好,所以我尝试通过

new Date()
运行字符串将字符串转换为日期,但是当我这样做时,这是我得到的响应: enter image description here

我正在转换为我的时区,日期最终会显示错误。过去,我一直记得 Mongoose 返回了一个日期对象,我需要将其转换为字符串。

我的主要问题是:如何让 Mongoose 只给我日期对象?我不想担心这个特定日期的时间。我只需要日期。

node.js reactjs mongodb express mongoose
2个回答
0
投票
当您调用

Date#toString() 时,JavaScript 运行时将使用您操作系统的时区。

另外,
MongoDB 将日期存储为

64-bit integers

,这意味着 Mongoose 默认不存储时区信息。

    


0
投票
React 通常不会让你直接在屏幕上打印对象,所以我立刻就知道这是一个字符串而不是日期对象

你是对的,JS Date 不是有效的 ReactNode,如果你尝试渲染它,应该会出错,但依靠副作用来排除故障可能会产生不可靠的结果,特别是当你可能无法控制所涉及的任何依赖项时(例如 React、浏览器、组件等)。为了验证您认为看到的行为,最好直接检查该值的类型

typeof props.data.dateOfBirth

现在回答你的问题:

JS 日期是对象,但它们表示日期时间值,并在内部将其存储为数值(自 Unix 纪元以来的毫秒数)和时区偏移量(除其他外)。

可以

获取日期输入,去掉时间,并将日期存储为没有时间值的日期对象,但是,您得到的是时间值为午夜的日期时间,这可能会由于以下原因而无法正确呈现时区偏移。 如果您只需要日期值用于渲染目的,那么最好将日期存储为字符串,否则您

需要手动管理时区偏移和日期解析(或使用库来为您完成) .

© www.soinside.com 2019 - 2024. All rights reserved.