2015-10-21 57 views
3

我有一個存儲日期的遺留數據庫沒有時區信息。我需要以面值將這些讀入客戶端,也就是說,服務器時區中的2 pm應該在客戶端時區中解釋爲2 pm如何忽略Sails.js中的時區

我能夠通過用簡單地忽略時區的方法替換Date.prototype.toJSON來查詢服務器時刪除時區。現在我需要一個類似的解決方案服務器端。

這不是how to set local timezone in sails的重複。我想未設置它。

編輯

日期是在PostGRES正確的,但水線/帆似乎把它變成JSON之前將其翻譯爲UTC。我不希望發生這種情況。 PostGRES中的查詢返回2013-02-28 15:00:00,但是當我在console中記錄來自Sails中相同查詢的結果時(通過custom made toJSON method),我改爲使用"2013-02-28T07:00:00.000Z"。然後它被髮送到客戶端並翻譯到客戶端的當地時間......您可以看到圖片。

+1

你可以添加更多的信息和代碼:你在哪裏看到時區更改:在數據庫?控制器?你準確使用了哪個數據庫?你如何將日期作爲字符串或紀元時間發送?你如何解析它到最新?你在客戶端「刪除」了什麼時區? –

+0

你總是可以使用字符串和數字。 Date對象只是一種方法。 –

+0

@MattJohnson是的。問題在於,如何僅替換Waterline.js專欄的.toJSON。 – dmvianna

回答

1

因此sails-postgresql timezone support is broken。這是我的解決方法。我將日期字符串解析回JavaScript日期實例,將其設置爲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; 
    },