我在DATETIME格式中将日期存储在MySQL数据库中。从数据库中提取模型时,日期(以DATETIME格式)将转换为模型的 initialize 方法中的日期对象。到目前为止一切都很好。
将模型保存到服务器时,需要将日期对象转换回DATETIME格式,以便服务器端代码正确解释日期。我已经使用了各种各样的hackery来做到这一点,但是我想知道在模型的 save 方法的哪个阶段可以安全地将日期转换为DATETIME格式?
一种方法是执行以下操作:
this.model.save({
date : date.toDateTime()
}, options);
但是,这会导致更改事件被触发,因为save方法之前的属性哈希与save事件之后的哈希不同(这会触发Backbone的set方法)。
答案 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格式化骨干的时间 -