我正在使用MongoDB和ReactJS。
所以我希望该用户在创建新项目时可以看到,但是mongodb显示此日期格式为“ 2018-10-08 18:09:56.628”,而我只想显示“ 2018-10-08”。我该怎么办?
我的项目架构:
let mongoose = require("mongoose");
let projectSchema = new mongoose.Schema({
projectname: String,
typeofproject: String,
imageURL: String,
dateMonthFrom: String,
dateYearFrom: String,
dateMonthTo: String,
dateYearTo: String,
tasks: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Tasks'
}],
user: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}],
created: {
type:Date,
default: Date.now
}
})
module.exports = mongoose.model('Project', projectSchema);
我的React代码:
[...]
<header>
<div>
<h1>
{this.state.project.projectname} // "Title"
{this.state.project.created} // "2018-10-08 18:09:56.628"
</h1>
</div>
</header>
[...]
答案 0 :(得分:2)
您需要使用某种格式设置功能。您可以使用内置的Date函数编写自己的函数,但是像moment(甚至可能是moment-timezone)之类的库使此操作极为简单。
moment(this.state.project.created).format('YYYY-mm-dd')
如果您不想引入第三方库,则可以使用内置的Date函数并编写自己的方法。
function formatDate(date) {
const currentMonth = date.getMonth();
const monthString = currentMonth >= 10 ? currentMonth : `0${currentMonth}`;
const currentDate = date.getDate();
const dateString = currentDate >= 10 ? currentDate : `0${currentDate}`;
return `${date.getFullYear()}-${monthString}-${currentDate}`;
}
答案 1 :(得分:0)
由于您使用的是mongoose
,因此您可以创建一个virtual field,该日期可以返回给您格式化后的日期,以便您的响应代码更加简洁。
您可以利用此功能或使用moment库(或其他许多库)
function dateFormat(date) {
const month = date.getMonth();
const day = date.getDate();
const monthString = month >= 10 ? month : `0${month}`;
const dayString = day >= 10 ? day : `0${day}`;
return `${date.getFullYear()}-${monthString}-${dayString}`;
}
console.log(dateFormat(new Date()))
虚拟字段设置如下:
projectSchema
.virtual('created.formatted')
.get(function () {
return dateFormat(this.created)
});
答案 2 :(得分:0)
也许有点晚了,但您可以像这样使用对象 Date:
const createdDate = new Date(this.state.project.created)
//Then, get the full year
....
{ createdDate.getFullYear() }
这样做,避免使用外部库作为 momentJs。