乐闻世界logo
搜索文章和话题

How do I format dates from Mongoose in NodeJS ?

4 个月前提问
3 个月前修改
浏览次数42

1个答案

1

在 Mongoose 中,格式化日期通常涉及两个步骤:首先,确定模式(Schema)中的日期字段类型,然后在查询结果返回后,使用 JavaScript 的日期处理方法或者其他类似 Moment.js 的库来格式化日期输出。

第一步:设置模式中的日期字段

在 Mongoose 中定义模式时,你可以为日期字段指定 Date 类型,如下所示:

javascript
const mongoose = require('mongoose'); const { Schema } = mongoose; const mySchema = new Schema({ createdAt: { type: Date, default: Date.now } // 其他字段... }); const MyModel = mongoose.model('MyModel', mySchema);

第二步:格式化日期输出

当你从数据库检索到数据时,日期字段会是 JavaScript 的 Date 对象。你可以使用 JavaScript 自带的方法来格式化,例如使用 toLocaleDateString 或者 toLocaleTimeString 方法。

javascript
MyModel.findById(someId, (err, doc) => { if (!err) { console.log(`The date is formatted as: ${doc.createdAt.toLocaleDateString('en-US')}`); } });

然而,对于更复杂的日期格式化,许多开发者会选择使用像 momentdate-fns 这样的库,这些库提供了更多的格式化选项和便捷的语法。

使用 Moment.js 示例

首先,你需要安装 Moment.js:

sh
npm install moment

然后你可以在你的代码中这样使用它来格式化日期:

javascript
const moment = require('moment'); MyModel.findById(someId, (err, doc) => { if (!err) { // 使用 moment 格式化 console.log(`The date is formatted as: ${moment(doc.createdAt).format('YYYY-MM-DD HH:mm:ss')}`); } });

使用虚拟属性格式化

Mongoose 也允许你在模式中定义虚拟属性,这可以用来提供格式化的日期字段,而不实际更改存储在数据库中的数据。

javascript
mySchema.virtual('formattedDate').get(function() { return moment(this.createdAt).format('YYYY-MM-DD HH:mm:ss'); }); MyModel.findById(someId, (err, doc) => { if (!err) { // 直接访问虚拟属性 console.log(`The date is formatted as: ${doc.formattedDate}`); } });

以上就是在Mongoose中定义和格式化日期的一些基本方法。记住,格式化日期通常是一个显示层的操作,而不是在数据库层面进行的,这样可以保持数据的一致性和灵活性。

2024年6月29日 12:07 回复

你的答案