如何在 sequelize ORM Query 中更改日期格式?
Posted
技术标签:
【中文标题】如何在 sequelize ORM Query 中更改日期格式?【英文标题】:How to change date format in sequelize ORM Query? 【发布时间】:2017-01-31 12:47:00 【问题描述】:我有这个模型
var Loans = sequelize.define('Loans',
book_id: DataTypes.INTEGER,
patron_id: DataTypes.INTEGER,
loaned_on: DataTypes.DATE
查询如下。
Loans.findAll().then(function(loans)
res.render('book_detail', loans: loans);
);
我的问题是,如何在查询结果中以 YYYY-MM-DD
格式更改 loaned_on
字段,并且不想要时间戳。
目前loaned_on
字段值在html 表单字段中显示为Sun Jan 29 2017 00:00:00 GMT+0000 (GMT)
,而在db
值中存储为2017-01-29 00:00:00.000 +00:00
。
顺便说一句,db
是 sqlite3
【问题讨论】:
【参考方案1】:我认为更好的解决方案是使用 sequelize 的自定义 getter。定义模型时,为 loaned_on
字段添加一个 getter,以进行所需的转换。像这样:
var Loans = sequelize.define('Loans',
book_id: DataTypes.INTEGER,
patron_id: DataTypes.INTEGER,
loaned_on:
type: DataTypes.DATE,
get: function(fieldName)
const rawValue = this.getDataValue('loaned_on');
// parse raw value using whatever logic you want
// this won't work, but you get the idea
return moment(rawValue).toISOString();
此外,这个 SO 答案显示了如何修改您的数据库配置,以便以您喜欢的方式存储日期(如果您使用的是 postgres):
https://***.com/a/48388996/814463
sqlite3 可能有一个类似的选项。
【讨论】:
【参考方案2】:使用https://momentjs.com/docs/#/parsing/string-format/ 或
Loans.findAll().then(function(loans)
loans = loans.map(function (loan)
loan.loaned_on = loan.loaned_on.getFullYear() + '-' +
(loan.loaned_on.getMonth() < 9 ? '0' : '') +
(loan.loaned_on.getMonth() + 1) + '-' + loan.loaned_on.getDate();
return loan;
);
res.render('book_detail', loans: loans);
);
【讨论】:
是的,这项工作也很好。我还在Loans
model instanceMethods 中创建了一个实例方法,如下所示: loanedOn: function() return dateFormat(this.loaned_on, "yyyy-mm-dd"); ,以上是关于如何在 sequelize ORM Query 中更改日期格式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?
如何在 Sequelize ORM 中获取不带前缀表名的连接数据结果
如何在sequelize ORM中使用从时间戳中选择并提取日期到月份和年份?
DAO vs ORM - 在 Sequelize.js 的上下文中解释的概念