我将日期从前端传递到后端,然后使用sequelize将它们保存到数据库中。来自前端的日期对于用户来说是本地的。第一个问题是当我试图从前端读取日期时,在后端(nodejs),日期出现在错误的时区(-3h)。我用luxon解决了这个问题,并将其设置为前端发送的日期。然后,当我将其保存到数据库时,当我在数据库(mysql)中检查它时,它再次变成错误的时区。我稍后会将日期发送到前端,因此它们必须处于正确的时区。如何将日期保存在正确的时区?代码:
module.exports.create_meal_post = async (req, res) => {
const { prods, createdAt, ...rest } = req.body;
const luxonDate = DateTime.fromISO(createdAt);
const normalizedDate = luxonDate.toISO();
console.log("from-front-end : ", createdAt); // incorrect date (-3h)
console.log("luxon date: ", normalizedDate); // correct date
try {
const result = await sequelize.transaction(async (t) => {
const meal = await Meals.create(
{
...rest,
createdAt: normalizedDate,
user_id: req.token.userId,
},
{ transaction: t }
);
const meal_id = meal.meal_id;
const products = prods.map((obj) => {
return {
meal_id: meal_id,
user_id: req.token.userId,
product_id: obj.product_id,
createdAt: normalizedDate,
...obj,
};
});
await MealProducts.bulkCreate(products, { transaction: t });
return meal;
});
res.status(201).send(result);
} catch (error) {
console.log(error);
res.status(400).json(error);
}
};
字符串
我也试过用二传手来实现这一点,结果是一样的。记录的结果:
front-end:2023-08- 02 T18:08:14.496Z luxon日期:2023-08- 02 T21:08:14.496+03:00数据库中的保存日期:2023-08-02 18:08:14
1条答案
按热度按时间xriantvc1#
我解决这个问题的方法是将日期存储为字符串,通过使用luxon提取字符串并将其转换为日期。
模型中的日期属性:
字符串
我把它保存为ISO,然后在获取日期时,我再次将字符串转换为ISO日期。这是用luxon js完成的