Sequelize中DataTypes.NOW函数无法生成时间戳的技术问题
解决Sequelize中DataTypes.NOW无法生成时间戳的问题
嘿,我来帮你搞定这个问题!你现在的代码里犯了一个常见的小误区:DataTypes.NOW并不是用来直接生成当前时间戳的函数,它本质上是Sequelize用来定义数据库字段默认值的一个类型标记对象,直接打印它肯定得不到你想要的时间字符串。
问题根源
你这段代码:
let time = db.Sequelize.DataTypes.NOW; console.log('generated time is' + time);
其实只是把Sequelize内置的一个字段配置对象赋值给了time变量,它的作用是告诉数据库“这个字段的默认值取当前时间”,而不是在JS层面生成时间。
正确的做法分三种场景:
1. 直接在JS层面获取当前时间/时间戳
如果只是想在代码里拿到当前时间,完全不用Sequelize,用JavaScript原生API就行:
// 获取可读的时间字符串 let time = new Date(); console.log('generated time is', time); // 获取毫秒级时间戳 let timestamp = Date.now(); console.log('generated timestamp is', timestamp);
2. 在Sequelize模型中设置字段默认值为当前时间
这才是DataTypes.NOW的正确使用场景——让数据库自动给字段赋当前时间作为默认值:
// 假设你定义一个User模型 const User = sequelize.define('User', { createdAt: { type: db.Sequelize.DATE, defaultValue: db.Sequelize.DataTypes.NOW // 这里生效,插入数据时数据库自动填当前时间 } });
3. 在Sequelize查询中使用数据库层面的当前时间
如果需要在查询(比如更新、插入)中调用数据库的当前时间函数,要用Sequelize.fn('now'):
// 示例:更新用户的最后登录时间为当前时间 await User.update( { lastLogin: db.sequelize.fn('now') }, { where: { id: 123 } } );
这样就能根据你的实际需求正确获取或设置时间啦!
内容的提问来源于stack exchange,提问作者Mrugesh
相关产品推荐
相关产品推荐

