sequelize时间相关操作

做毕设学了点东西系列

sequelize是一个非常有用的ORM框架,以对象的形式访问数据库表,基于Promise,实现了多种数据库的多种特性…

这篇文章主要记录一下这次新使用的一些时间相关的查询和设置

自动更新时间

举个例子,在mysql数据库里,可以给某个属性添加默认CURRENT_TIMESTAMP,这样的话就可以在添加或者更新的时候自动写入这个属性。当使用sequelize定义数据表模型时,首先设置timestamps属性为true时候,才会自动更新时间戳。Sequelize创建和更新的时间戳字段默认分别是createdAtupdatedAt,这两个字段可以自定义,下面是一个数据表模型的完整例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
return sequelize.define('task', {
id: {
autoIncrement: true,
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true
},
created_at: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
},
updated_at: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
},
}, {
sequelize,
tableName: 'task',
timestamps: true, // 打开时间戳
createdAt: "created_at", // 将createdAt设为自定义字段created_at
updatedAt: "updated_at",
indexes: [
{
name: "PRIMARY",
unique: true,
using: "BTREE",
fields: [
{ name: "id" },
]
},
]
});
};

时间查询相关的操作

比如要查询某一天的数据,可以传入一个使用new Date()后某天的时间戳,然后使用Op的区间来限定这个范围。比如下面这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
const { Op } = require("sequelize");
const getTaskByDay = async (date) => {
const data = await Task.findAll({
where: {
updated_at: {
[Op.lt]: date,
[Op.gt]: date - 24 * 60 * 60 * 1000,
},
}
})
return data;
}

记录一下获取当天凌晨时间戳的操作

1
const today = new Date(new Date().setHours(0,0,0,0));