2012-02-03 31 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/