#node.js #mongodb #momentjs
Вопрос:
Я использую Moment.js чтобы установить даты в Node.js сервер. Работает нормально, но по какой-то причине при создании новой модели и назначении даты время устанавливается на два часа раньше.
const Comment = require('./../models/comment');
const moment = require('moment');
const { getAccessToken } = require('../services/jwt');
function createComment(req, res) {
const comment = new Comment();
const { user, content, post_slug, post_title, post_type , post_id, thumb } = req.body;
comment.user = user;
comment.content = content;
comment.post_slug = post_slug;
comment.post_id = post_id;
comment.post_title = post_title;
comment.post_type = post_type;
comment.published_at = moment().format();
comment.thumb = thumb;
comment.deleted = false;
console.log(comment.published_at); //2021-06-09T17:36:13.000Z
console.log(moment().format()); //2021-06-09T19:36:13 02:00
if (!user || !content || !post_id || !post_slug || !post_type || !post_title) {
res.status(404).send({status: 404, message: "Ha habido un problema con la recepción de los datos."});
} else {
comment.save((err, commentStored) => {
if (err) {
res.status(500).send({message: "Error del servidor" err})
} else {
if (!commentStored) {
res.status(404).send({message: "Error al crear el comentario"});
} else {
res.status(200).send({comment: commentStored})
}
}
});
}
}
Уже задан часовой пояс в настройках MongoDB:
console.log(comment.published_at); //2021-06-09T17:36:13.000Z
console.log(moment().format()); //2021-06-09T19:36:13 02:00
Ответ №1:
Значения даты в MongoDB всегда (и только) сохраняются как время UTC. Вам необходимо отобразить местное время на стороне клиента или сохранить входной часовой пояс в отдельном поле.
И я думаю, что вам следует лучше использовать
comment.published_at = moment().toDate()