【发布时间】:2012-02-02 20:54:15
【问题描述】:
我最近开始使用 KnockoutJs 并很快意识到使用默认的 Json(myModelWithADate) 导致默认的 json 编码为 \/Date(-62135578800000)\/ 通过一些研究,我找到了四种可能的方法来处理我在 dom 元素中的日期显示。
1) 创建一个绑定来处理从 Json 日期到您想要的格式的转换
ko.bindingHandlers.date = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var jsonDate = valueAccessor();
var value = new Date(parseInt(jsonDate.substr(6)));
var ret = value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear();
element.innerHTML = ret;
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
}
};
用法
<td data-bind="date: DueDate">
</td>
2) 从控制器返回“字符串”
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) 使用 JSON.NET 指定日期时间格式,在 james.newtonking.com
例子
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) 使用 JSON.parse 处理您的日期,如 stackoverflow answer.
所示JSON.parse(jsonText, function(key, value) {
// Check for the /Date(x)/ pattern
var match = /\/Date\((\d+)\)\//.exec(value);
if (match) {
var date = new Date(+match[1]); // Convert the ticks to a Date object
return humanReadable(date); // Format the date how you want it
}
// Not a date, so return the original value
return value;
});
它们似乎都有效,但我仍在纠结哪一种感觉“正确”。现在,我的直觉与绑定和返回字符串混合在一起。我可以看到自己扩展绑定以使用 jQuery UI 日期选择器控件处理输入。
在处理显示日期或其他类型(例如货币)时,是否有公认的做法?是否还有其他选项可以解决这个问题?
【问题讨论】:
-
我在我的项目中使用字符串。模型绑定器可以从字符串中解析日期,因此我可以通过这种方式轻松地往返值。
-
我已将我的 json 净结果发布到相同的问题,它将日期转换为 iso 格式,使其更易于使用。 stackoverflow.com/questions/15778599/…
-
使用 momentjs 是处理日期的最佳方式,请参阅我对这个问题的回答。
标签: javascript asp.net asp.net-mvc json knockout.js