如何处理Backbone中的日期?

Bar*_*obs 10 javascript backbone.js

我将日期以DATETIME格式存储在MySQL数据库中.从数据库中提取模型时,日期(以DATETIME格式)将转换为模型初始化方法中的日期对象.到现在为止还挺好.

将模型保存到服务器时,需要将日期对象转换回DATETIME格式,以便服务器端代码正确解释日期.我已经使用了各种各样的hackery来做这件事,但是我想知道模型的保存方法在哪个阶段可以安全地将日期转换为DATETIME格式?

一种方法是执行以下操作:

this.model.save({
    date : date.toDateTime()
}, options);
Run Code Online (Sandbox Code Playgroud)

但是,这会导致更改事件被触发,因为save方法之前的属性hash与save事件之后的哈希不同(这会触发Backbone的set方法).

Tom*_*icz 9

我建议在模型和界面中使用UNIX时间(从1970年开始的秒数/毫秒),并仅在转换为可读日期View.

所以服务器发送和接收日期都是数字1328281766454,这就是你存储它们的方式Backbone.Model.当必须渲染时,View您可以简单地调用:

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

在服务器端也可以这样做.相信我,这是最简单,最便携的传输日期的方式,没有所有这些时区问题.

  • unix时间,或[ISO标准日期表示](http://en.wikipedia.org/wiki/ISO_8601).我通常使用后者.但我同意标准的非对象表示会有助于这种情况. (4认同)
  • 你说服了我,托马斯(和罗布).这需要一些工作,但我看到了一个独立于环境/语言的日期格式的好处.非常感谢Tomasz和Rob的时间.非常感激. (3认同)

Rob*_*ska 9

我会做两个地方之一:

  • 在服务器上:

    这可能是最有意义的,因为您的服务器端实现实际上是需要DATETIME表示的实现; 您的客户端代码根本不需要关心.

  • toJSON()你的模型上:

    如果你必须做的客户端,覆盖Backbone.ModeltoJSON()为你的模型,并更新它.例:

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

    如果这样做,您需要在模型initialize()parse()函数中转换日期.


小智 7

可能不是你想要的答案 - 但是看到人们使用moment.js格式化骨干的时间 -

http://momentjs.com/