ReactJS - Как изменить формат даты из MongoDB Date.now

Я использую 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>
[...]
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
0
3 256
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно использовать какую-то функцию форматирования. Вы можете написать свой собственный, используя встроенные функции Date, но библиотеки, такие как момент (и, возможно, момент-часовой пояс), делают это чрезвычайно простым.

moment(this.state.project.created).format('YYYY-mm-dd')

Если вы не хотите использовать стороннюю библиотеку, вы можете использовать встроенные функции Дата и написать свой собственный метод.

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}`;
}

Первый сработал! Спасибо: D мой пример: <h1> {moment (this.state.project.created) .format ('YYYY-mm-dd') ‌} </h1>

AFAF 08.10.2018 20:20

Поскольку вы используете mongoose, вы можете создать виртуальное поле, который может возвращать вам отформатированную дату, чтобы ваш код реакции был более чистым.

Вы можете использовать эту функцию или использовать библиотеку момент (или многие другие)

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.info(dateFormat(new Date()))

Настройка виртуального поля будет выглядеть так:

projectSchema
  .virtual('created.formatted')
  .get(function () {
    return dateFormat(this.created)
  });

Возможно, немного поздно, но вы можете использовать объект Date следующим образом:

const createdDate = new Date(this.state.project.created)
//Then, get the full year
....
{ createdDate.getFullYear() }

Поступая так, вы избегаете использования внешней библиотеки в качестве momentJs.

Другие вопросы по теме