【问题标题】:How to ignore timezones in Sails.js如何在 Sails.js 中忽略时区
【发布时间】:2016-01-20 00:37:10
【问题描述】:

我有一个旧数据库,其中存储日期没有时区信息。我需要将这些按面值读入客户端,即服务器时区中的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,但是当我 console.log 来自 Sails 中相同查询的结果(通过 custom made toJSON method)时,我得到了 "2013-02-28T07:00:00.000Z"。然后它被发送给客户并翻译成客户的本地时间......你得到了图片。

【问题讨论】:

  • 您能否添加更多信息和代码:您在哪里看到时区更改:在数据库中?控制器?你到底在使用什么数据库?你如何将日期作为字符串或纪元时间发送?您如何将其解析回日期?你做了什么来“删除”客户端的时区?
  • 您始终可以使用字符串和数字。 Date 对象只是一种方法。
  • @MattJohnson 是的。问题只是如何仅将 .toJSON 替换为 Waterline.js 列。
  • @OferHerman,请参阅编辑。它通过 socket.io 解析回日期。我不确定内部情况。这是所有“开箱即用”的 Sails.js 功能。

标签: date datetime timezone sails.js waterline


【解决方案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;
    },

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 2016-12-23
    • 1970-01-01
    • 2020-08-28
    • 2011-10-04
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多