如何在Sails.js中忽略时区

时间:2015-10-21 06:09:11

标签: date datetime timezone sails.js waterline

我有一个旧数据库,其中存储日期没有时区信息。我需要以面值将这些内容读入客户端,也就是说,服务器时区中的2 pm应该在客户端时区中被解释为2 pm

我可以在查询服务器时删除时区,方法是用一个简单忽略时区的方法替换Date.prototype.toJSON。现在我需要一个类似的服务器端解决方案。

这不是how to set local timezone in sails的重复。我想取消设置它。

修改

PostGRES中的日期是正确的,但Waterline / Sails似乎在将其转换为JSON之前将其转换为UTC。我不希望这种情况发生。 PostGRES中的查询返回2013-02-28 15:00:00,但是当我在Sails(通过custom made toJSON method)中控制同一查询的结果时,我得到了"2013-02-28T07:00:00.000Z"。然后它被发送到客户端并转换到客户当地时间......你得到了图片。

1 个答案:

答案 0 :(得分:1)

所以sails-postgresql timezone support is broken。这是我的解决方法。我将日期字符串解析回JavaScript Date实例,将其设置为UTC时间,然后返回ISO字符串,并将时区切断。客户从不抱怨。 :)

这一切都在api/model/theModel.js中完成,如docs中所述。

    toJSON: function() {

        var obj = this.toObject();

        if (obj.datetime) {

            var date = new Date(Date.parse(obj.datetime)),
                y = date.getFullYear(), 
                m = date.getMonth(), 
                d = date.getDate(), 
                h = date.getHours(), 
                M = date.getMinutes(),
                newDate = new Date();

            newDate.setUTCFullYear(y); 
            newDate.setUTCMonth(m); 
            newDate.setUTCDate(d); 
            newDate.setUTCHours(h);
            newDate.setUTCMinutes(M);

            obj.datetime = newDate.toISOString().slice(0,-8);
        }

        return obj;
    },
相关问题