2012-02-03 68 views
10

我在MySQL數據庫中以DATETIME格式存儲日期。從數據庫中提取模型時,日期(以DATETIME格式)將被轉換爲模型的初始化方法中的日期對象。到現在爲止還挺好。如何處理Backbone中的日期?

將模型保存到服務器時,需要將日期對象轉換回DATETIME格式,以便服務器端代碼正確解釋日期。我已經使用各種hackery來做到這一點,但我不知道在什麼階段可以的模型的保存方法可以安全地將日期轉換爲DATETIME格式?

一種方法是做到以下幾點:

this.model.save({ 
    date : date.toDateTime() 
}, options); 

然而,這會導致更改事件以來的屬性哈希保存方法之前被解僱是不一樣的保存事件後的散列(這觸發了Backbone的設置方法)。

回答

9

我會建議使用UNIX time(1970年以來的秒數/毫秒)在模型和界面中,並且只能在View轉換爲可讀日期。

因此,服務器都發送和接收日期,如1328281766454這樣的數字,這就是你如何將它們存儲在Backbone.Model。當它在View渲染,你可以簡單地調用:

new Date(this.model.get('someTime')); //Fri Feb 03 2012 16:09:26 GMT+0100 (CET) 

同樣可以在服務器端完成。相信我,這是沒有所有這些時區問題的最簡單和最便攜的日期轉換日期。

+4

無論是UNIX時間,或[ISO標準的日期表示] (http://en.wikipedia.org/wiki/ISO_8601)。我通常使用後者。但我同意標準的非客體表示會有助於這種情況。 – 2012-02-03 15:15:16

+0

這是我考慮過的一個選項,但是它會在每次需要時創建一個日期對象,從而產生相當多的開銷。一致的日期表示方法確實會讓事情變得更容易。 – 2012-02-03 15:24:28

+3

你說服了我,托馬斯(和羅布)。這將需要一些工作,但我認爲擁有獨立於環境/語言的日期格式的好處。非常感謝您的時間Tomasz和Rob。非常感激。 – 2012-02-03 19:19:20

9

我願意做它的兩個地方之一:

  • 在服務器上:

    這可能是最有意義的,因爲你的服務器端實現真正需要的DATETIME的一個表示;你的客戶端代碼應該不必在意。

  • toJSON()你的模型:

    如果必須不要在客戶端上,覆蓋Backbone.ModeltoJSON()爲你的模型,並更新它。例如:

    toJSON: function() { 
        var json = Backbone.Model.prototype.toJSON.call(this); 
        json.date = convertDate(this.get('date')); 
        return json; 
    } 
    

    如果你這樣做,你需要將日期轉換回來,無論是在模型的initialize()parse()功能。

+0

我完全同意,最好的地方是在服務器端完成它,但我不認爲有可能使用PHP將JavaScript日期對象轉換爲DATETIME。 – 2012-02-03 15:21:53

+0

@BartJacobs - 我確定這是,這只是一個你需要做多少工作才能完成的問題。您只需從JSON對象的屬性中構建PHP'date()'或SQL'DATETIME'。 – 2012-02-03 15:24:28

+0

爲了簡化和澄清一點。解析:'data.date = uiDate(data.date);'和toJSON:'json.date = isoDate(json.date);' – juanitogan 2014-07-14 21:08:17

7

可能不是你要找的答案 - 但看到鄉親用moment.js骨幹格式化時間 -

http://momentjs.com/