我有一个旧数据库,其中存储日期没有时区信息。我需要以面值将这些内容读入客户端,也就是说,服务器时区中的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"
。然后它被发送到客户端并转换到客户当地时间......你得到了图片。
答案 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;
},