引言
Sequelize 是一个强大的 Node.js ORM 框架,它可以使我们更轻松地存取数据库。在实际开发中,我们经常需要处理日期和时间字段,以便在应用程序中正确显示数据。在本文中,我们将介绍如何使用 Sequelize 对日期和时间进行处理。
数据类型
Sequelize 提供了多种数据类型,包括 DATE, DATEONLY, TIME, 和 DATETIME。这些数据类型表示不同的日期和时间格式。
DATE
:表示日期和时间的组合,例如:2022-01-01 10:30:00。DATEONLY
:表示只有日期,没有时间,例如:2022-01-01。TIME
:表示只有时间,没有日期,例如:10:30:00。DATETIME
:和DATE
类似,但具有更高的精度。
存储日期和时间
要存储日期和时间,我们需要使用 Sequelize 提供的数据类型。例如:
const User = sequelize.define('user', { name: Sequelize.STRING, birthdate: Sequelize.DATEONLY, // 只存储日期部分 registeredAt: Sequelize.DATE, // 存储日期和时间 lastLogin: Sequelize.TIME, // 只存储时间部分 });
接下来,我们可以使用 Sequelize 提供的方法来操作日期和时间字段。
取得当前时间
要获取当前时间,我们可以使用 Sequelize.fn() 方法和 NOW() 函数。例如:
-- -------------------- ---- ------- ----- ---- - ----- -------------- ------ - --- - -- ----------- - --------------------- --------------- ---------------------- --------------- --------------------- ------------------------------- ---------------- -- --- ------------------------------------- -- ------ ------------------------------------- -- ------ -------------------------------------- -- ------展开代码
在上面的示例中,我们使用 Sequelize.fn() 方法来调用 NOW() 函数和 DATE 函数来获取当前时间和日期。此外,我们还使用 Sequelize.col() 方法来引用注册时间字段并调用 YEAR() 函数来获取注册的年份。
比较日期和时间
要比较日期和时间,我们可以使用 Sequelize 提供的查询操作符,例如:$gt, $lt。
-- -------------------- ---- ------- ----- ---- - ----- -------------- ------ - ---------- - -------- --- ------------------- -- ---------- - -------- ----------- -- -- --- ------------------ -- ------展开代码
在上面的示例中,我们使用 Op.gt 和 Op.lt 操作符来比较 createdAt 和 lastLogin 字段,以查找 createDate 大于 2022-01-01 以及 lastLogin 小于 10:30:00 的记录。
处理日期和时间
要处理日期和时间,我们可以使用 Sequelize 提供的方法。
将字符串转换为日期和时间
要将字符串转换为日期和时间,我们可以使用 Sequelize.fn() 方法和 DATE() 函数。
const user = await User.findOne({ where: { id: 1 }, attributes: [ [Sequelize.fn('DATE', Sequelize.col('birthdate')), 'birthday'], ], }); console.log(user.get('birthday')); // 返回生日日期
在上面的示例中,我们使用 Sequelize.fn() 方法来调用 DATE() 函数并将生日日期转换为日期类型。
格式化日期
要格式化日期,我们可以使用 Sequelize.fn() 方法和 DATE_FORMAT() 函数。
const user = await User.findOne({ where: { id: 1 }, attributes: [ [Sequelize.fn('DATE_FORMAT', Sequelize.col('registeredAt'), '%Y-%m-%d'), 'registerDate'], ], }); console.log(user.get('registerDate')); // 返回格式化的注册日期
在上面的示例中,我们使用 Sequelize.fn() 方法调用 DATE_FORMAT() 函数并使用 %Y-%m-%d 格式将注册日期格式化为 2022-01-01。
添加或减去日期
要添加或减去日期,我们可以使用 Sequelize.fn() 方法和 DATE_ADD() 函数或 DATE_SUB() 函数。
-- -------------------- ---- ------- ----- ---- - ----- -------------- ------ - --- - -- ----------- - ------------------------- --------------------------- --------------------------- - -------- ---------------- ------------------------- ------------------------------ --------------------------- - --------- ------------- -- --- -------------------------------------- -- ---------- ----------------------------------- -- -----------展开代码
在上面的示例中,我们使用 Sequelize.fn() 方法调用 DATE_ADD() 函数和 DATE_SUB() 函数,并使用 Sequelize.literal() 方法将 INTERVAL 1 YEAR 和 INTERVAL 1 MONTH 传递给它们。
结论
Sequelize 提供了多种方法来处理日期和时间,包括取得当前时间,比较日期和时间,以及处理日期和时间。正确处理日期和时间非常重要,以便在应用程序中正确显示数据。在实际开发中,我们应该根据需求选择适当的方法来处理日期和时间字段。
示例代码
-- -------------------- ---- ------- ----- - ---------- -- - - --------------------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- -------- --- ----- ---- - ------------------------ - ----- ----------------- ---------- ------------------- ------------- --------------- ---------- --------------- --- -- --------- ----- ---- - ----- -------------- ------ - --- - -- ----------- - --------------------- --------------- ---------------------- --------------- --------------------- ------------------------------- ---------------- -- --- ------------------------------------- -- ------ ------------------------------------- -- ------ -------------------------------------- -- ------ -- ------- ----- ---- - ----- -------------- ------ - ---------- - -------- --- ------------------- -- ---------- - -------- ----------- -- -- --- ------------------ -- ------ -- ------------ ----- ---- - ----- -------------- ------ - --- - -- ----------- - --------------------- ---------------------------- ------------ -- --- ---------------------------------- -- ------ -- ----- ----- ---- - ----- -------------- ------ - --- - -- ----------- - ---------------------------- ------------------------------ ------------ ---------------- -- --- -------------------------------------- -- ---------- -- ------- ----- ---- - ----- -------------- ------ - --- - -- ----------- - ------------------------- --------------------------- --------------------------- - -------- ---------------- ------------------------- ------------------------------ --------------------------- - --------- ------------- -- --- -------------------------------------- -- ---------- ----------------------------------- -- -----------展开代码
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670da2ba5f551281025dcd51