javascript - 在 sails 中创建 UTC 时间戳而不覆盖 'createdAt' 和 'updatedAt'

标签 javascript mysql node.js sails.js momentjs

我想使用 UTC 时间戳 (createTimeUTC) 更新模型之一中的字段。但我不想覆盖“createdAt”字段。我尝试导入 moment 并使用 moment.utc().format() 来更新创建记录。但即使 moment 似乎给出了正确的 UTC 格式时间戳,数据库中的记录仍然被创建为“null”。

这是我的模型:

模块.导出= {

    attributes: {
        ....

            createTimeUTC: {
                type: 'datetime',
            },

      },
 afterCreate:function(values,next) {
    var moment=require('moment');
    values.createTimeUTC= moment.utc().format();
    console.log("after create: "+ values.createTimeUTC);
    next();
    };

这是我在 Controller 中的创建方法:

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,而不必在后端创建新字段?

最佳答案

仅更改 afterCreate 处理程序中的值不会最终确定更改。 values 对象不是模型实例,而是一个简单的对象。要保存新创建的字段,您需要在 afterCreate 中再次调用数据库:

afterCreate: function(values, next) {
    var moment = require('moment');
    values.createTimeUTC= moment.utc().format();
    Note.update({ id: values.id }, values, next);
};

就更改前端的时间格式而言,如果您的 View 支持与日期相关的过滤器,则可以在您的 View 中执行此操作。如果无法进行服务器端渲染,唯一的选择是使用纯 JS 在页面加载后显示/更新日期/时间。

如果您希望每次访问模型时都显示格式化日期,则在模型的 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 部分中。

注意:如果您希望在保存到数据库时保留日期/时间格式,请在字段中使用 string 类型而不是 datetime模型,否则它仍然会反射(reflect)配置的区域设置的日期/时间字符串。

关于javascript - 在 sails 中创建 UTC 时间戳而不覆盖 'createdAt' 和 'updatedAt',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551761/

相关文章:

mysql - 如何连接两个表

node.js - npm 发布 : how to ignore hooks

javascript - 文本框只显示一半文本

javascript - 文档头部允许的最大数量 <script> 标签是多少?

javascript - 使用react-native克隆原生android闹钟屏幕

javascript - 无法添加外键约束

node.js - Keycloak - 授权验证失败。原因: invalid token (wrong ISS)

javascript - 为什么打印采用响应式布局?

mysql - 使用 SQL_CALC_FOUND_ROWS 和 UNION ALL 的 Select 语句

c# - MySql 内连接,如果值等于 0,则为 "OR"