在 Node.js 的 ORM 框架 Sequelize 中,数据库中日期时间类型通常被定义为 Date 数据类型。在 Sequelize 中,Date 类型的属性与方法可以帮助我们方便简洁地处理日期时间相关的操作。
本文将介绍 Sequelize 中 Date 类型的基本用法,以及在实际开发场景中的应用。
Sequelize 中的 Date 类型基础使用
Sequelize 中的 Date 类型属性可以在模型定义中通过 Sequelize.DATE
来定义。例如,在以下的用户模型中:
const User = sequelize.define('user', { name: Sequelize.STRING, age: Sequelize.INTEGER, lastLoginAt: Sequelize.DATE // 定义 lastLoginAt 为 Date 类型 });
通过上述定义,我们可以对 lastLoginAt
属性进行数据库 CRUD 操作。在进行插入操作的时候,可以直接传入 Date 类型的值或者是能被解析为 Date 对象的字符串,例如:
-- -------------------- ---- ------- ------------- ----- -------- ---- --- ------------ --- ------ -- ---- ---- -- --- ------------- ----- ------ ---- --- ------------ ----------- --------- -- -------- ---- ------ ---
在查询操作中,我们可以直接使用 Op.gt
、Op.lt
等操作符来进行条件筛选,例如:
User.findAll({ where: { lastLoginAt: { [Op.gt]: new Date('2021-12-01 00:00:00') } } });
Date 类型的常用方法
在使用 Sequelize 进行数据操作时,我们常常需要对日期时间类型的属性进行转换、比较、格式化等操作。下面我们将介绍 Sequelize 中 Date 类型的常用方法。
Sequelize.fn()
Sequelize.fn()
可以帮助我们进行 SQL 函数的调用。在处理日期时间函数时,我们可以使用 MySQL 中的日期时间函数来操作日期时间类型。
例如,要获取当前时间的时间戳,我们可以使用以下代码:
User.findOne({ attributes: [ [Sequelize.fn('UNIX_TIMESTAMP', Sequelize.fn('NOW')), 'timestamp'] ] });
Sequelize.col()
Sequelize.col()
可以帮助我们将序列化后的字段转换为 Sequelize 中的字段。在处理日期时间的比较操作时,我们可以使用 Sequelize.col()
来对各种日期时间属性进行比较。
例如,我们要查询最近一个月注册的用户,可以使用以下代码:
User.findAll({ where: { createdAt: { [Op.gt]: Sequelize.literal(`DATE_SUB(NOW(), INTERVAL 1 MONTH)`) // 比较 createdAt 是否大于当前时间减去一个月 } } });
moment.js
moment.js 是一个提供时间格式化和计算时间差的 JavaScript 库,可以用于格式化和处理日期时间。
在 Sequelize 中,我们可以用 moment()
方法将 Date 类型的数据格式化成字符串类型。例如,将 User 模型中 lastLoginAt
时间属性格式化成年月日时分秒的格式:
-- -------------------- ---- ------- ----- ------ - ------------------ -------------- ----------- - ---------------------------- ----------------------------- --------- ----------- ----------------------- -- - ----------- ------- - ------------- -- - ------------------ -- - --------------------------------------- -- ---- ---------- -------- ------ --- ---
dayjs
dayjs 是一个轻量级的 JavaScript 库,提供了格式化、计算时间差等常用日期时间操作函数。与 moment.js 类似,dayjs 也可以被用于格式化和处理日期时间。
例如,我们要查询注册时间在三个月前和当前时间之间的用户:
-- -------------------- ---- ------- ----- ----- - ----------------- -------------- ------ - ---------- - -------- ------------------- ------------------- -- --------- -------------- -------- --- ------ - - ---
总结
在 Sequelize 中,Date 类型的属性和方法可以帮助我们轻松处理日期时间相关的操作,使得开发者可以更加专注于业务逻辑的实现。在实际开发中,选择合适的日期时间处理函数和库对于代码质量和开发效率都具有很高的意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64713a2f968c7c53b0f2467e