在sails中创buildUTC时间戳而不会覆盖“createdAt”和“updatedAt”
我想用UTC时间戳(createTimeUTC)更新我的一个模型中的字段。 但我不想覆盖/重写'createdAt'字段。 我尝试导入时刻,并使用moment.utc().format()更新创buildlogging。 但即使时刻似乎给予适当的UTC格式时间戳,数据库中的logging仍然被创build为“空”。
这是我的模型:
module.exports = {
attributes: { .... createTimeUTC: { type: 'datetime', }, }, afterCreate:function(values,next) { var moment=require('moment'); values.createTimeUTC= moment.utc().format(); console.log("after create: "+ values.createTimeUTC); next(); };
这里是我在控制器中的创build方法:
myControllerMethod: function(req, res) { var moment=require('moment'); var params = req.params.all(); params.owner = req.session.user.id; Note.create({owner: params.owner, title: params.title, content: params.content, createTimeUTC: params.createTimeUTC }).exec(function(err, note) { if(err) { var msg = 'Unexpected error has occured'; sails.log.error(err); res.status(400); return res.send(msg); } else { console.log("CREATED:"+note.createTimeUTC); res.redirect("/admin/notes/scratchpad"); } }); },
有人可以指出我哪里错了吗?
而且,有没有办法在前端将“createdAt”时间转换为UTC,而不是在后端创build新的字段?
只需更改afterCreate
处理程序中的值,不会最终确定更改。 values
对象不是一个模型实例,而是一个简单的对象。 要保存新创build的字段,您需要在afterCreate
进行另一个数据库调用:
afterCreate: function(values, next) { var moment = require('moment'); values.createTimeUTC= moment.utc().format(); Note.update({ id: values.id }, values, next); };
就改变前端的时间格式而言,如果它支持与date相关的filter,则可以在视图中执行此操作。 如果服务器端渲染是不可能的,唯一的select是显示/更新页面加载后的date/时间,使用普通的JS。
如果您希望每次访问模型时都显示格式化的date,则可以在模型的toJSON
函数中进行格式设置:
toJSON: function(){ var moment=require('moment'); var obj = {}; obj.field = this.field;//for all other fields obj.createdAt = moment.utc(this.createdAt).format(); return obj; }
将其放置在模型的attributes
部分中。
注意 :如果希望在保存到数据库时保留date/时间格式,请在模型中使用typesstring
而不是datetime
时间,否则将仍然反映configuration的区域设置的date/时间string。
进一步处理这个问题,我发现updatedAt
和updatedAt
时间已经被updatedAt
(在控制台上用UTC打印,尽pipe在视图中可以看到PDT)在MySQL中存储为UTC。 所以我只需要在我的视图中使用moment.utc(note.createdAt).format()
以UTC显示时间。 就MySQL数据库的风帆行为而言, 这个讨论给了一些理解。