如何处理Backbone中的日期?

时间:2012-02-03 15:04:03

标签: javascript backbone.js

我在DATETIME格式中将日期存储在MySQL数据库中。从数据库中提取模型时,日期(以DATETIME格式)将转换为模型的 initialize 方法中的日期对象。到目前为止一切都很好。

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

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

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

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

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:9)

我会选择两个地方之一:

  • 在服务器上:

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

  • 在您的模型的toJSON()中:

    如果必须在客户端上执行此操作,请覆盖模型的Backbone.Model toJSON()并在那里进行更新。例如:

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

    如果您这样做,则需要在模型的initialize()parse()功能中转换日期。

答案 2 :(得分:7)

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

http://momentjs.com/