我最近开始使用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) {
}
};
Run Code Online (Sandbox Code Playgroud)
用法
<td data-bind="date: DueDate">
</td>
Run Code Online (Sandbox Code Playgroud)
2)从控制器返回"字符串"
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
Run Code Online (Sandbox Code Playgroud)
3)使用JSON.NET指定在james.newtonking.com上看到的日期时间格式
例
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
Run Code Online (Sandbox Code Playgroud)
4)使用JSON.parse来处理您的日期,如此stackoverflow答案中所示.
JSON.parse(jsonText, function(key, value) …Run Code Online (Sandbox Code Playgroud) 我在asp.net mvc页面上使用knockoutjs.我使用ajax通过调用将表单保存回服务器ko.toJSON(viewModel),然后使用jQuery将结果发回服务器.除了作为空对象持久化的Javascript日期之外,视图模型上的所有属性都已成功序列化.
宣言:
var viewModel = {
startTime: ko.observable(),
type: ko.observable(),
durationInMinutes: ko.observable(),
notes: ko.observable()
};
Run Code Online (Sandbox Code Playgroud)
保存数据:
var postData = ko.toJSON(viewModel);
$.ajax({
url: "/data",
type: "POST",
data: postData,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function () {
console.log('success!');
},
error: function () {
console.log('fail!');
}
});
Run Code Online (Sandbox Code Playgroud)
viewModel.startTime()的console.log值是:
Date {Tue May 10 2011 11:30:00 GMT-0500 (Central Daylight Time)}
在保存数据的第1行之后,postData的值为:
{
"startTime": {},
"type": "1",
"durationInMinutes": "45",
"notes": "asfasdfasdfasdfasdfasdfasdfas",
"displayableStartTime": "10-May 11:30"
}
Run Code Online (Sandbox Code Playgroud)
如果我将保存数据的第1行展开到
var jsonEvent …Run Code Online (Sandbox Code Playgroud)