在淘汰赛VM中,我试图将日期时间注入房产。该函数生成正确的日期,但当它在UI中呈现时,我得到一个12-31-1969 7pm的日期。 此项目未被序列化并且正在即时生成。有人可以帮助我理解为什么要生成这个以及如何纠正它。我已经看过很多文章,这些文章出现在php代码中,但没有特别针对淘汰赛。有一篇关于SO的文章引用了dateTimePicker,但我没有立即看到OP问题或我的问题之间存在相似之处。
在我的js文件中
function returnDateFormat() {
var d = new Date();
date = d.getDate();
date = date < 10 ? "0" + date : date;
mon = d.getMonth() + 1;
mon = mon < 10 ? "0" + mon : mon;
year = d.getFullYear();
hours = d.getHours();
min = d.getMinutes();
sec = d.getSeconds();
return (mon + "/" + date + "/" + year + " " + hours + ":" + min + ":" + sec);
}
成功时我的ajax调用中引用了该函数。基本上我只想更新VM以显示事件发生的日期。当页面初始化时,它会被加载并绑定在UI中,因此我知道在下一次加载时,正确的值将从DB中拉出并填充。如果我不需要,我只是不想从通话中返回整个日期集。
$.ajax({
type: "POST",
url: "warehouse/" + command,
data: "{ productId:'" + product.ProductId() + "', newname: '" + newname + "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
if (msg.Key == true) {
DisplaySuccess("Update Complete.", "The product has been successfully updated.");
//update product name in VM
product.Name(newname);
product.DateLastModified(returnDateFormat());
}
else {
//Display error message if ajax msg fails
DisplayError("Error Renaming Product ", msg.Value);
}
}, error: function (err) {
DisplayError("Error Renaming Product", "The server returned an error code. Code: " + err.status);
}
});
然后在cshtml文件中,我将日期修改元素绑定到div元素
<div title="Product Last Modified" class="productDetailItem scalableText productModified" data-bind="text: FormatDate(DateLastModified())"></div>
更新:进一步调查时,原始日期作为Json序列化字符串传递,这是cshtml函数调用FormatDate地址的内容。它解析并格式化Json字符串。我当时没有意识到这一点,因为我没有写过这部分映射。
它破坏的原因是我传入格式化的日期时间而不是函数预期的Json序列化字符串。为了纠正这个问题,我计划在客户端生成一个日期时间,然后对其进行序列化,将其传递给函数,这应该可以解决问题。我很快就会发布一个有效的解决方案 我欢迎其他建议。 -cheers
答案 0 :(得分:1)
我认为你只想这样做:
<div title="Product Last Modified" class="productDetailItem scalableText productModified" data-bind="text: DateLastModified"></div>
DateLastModified已经格式化,为什么要再次格式化?作为旁注,我强烈建议您查看moment.js。您可以使用以下命令替换整个'returnDateFormat'函数:
product.DateLastModified(moment().format("MM/DD/YYYY hh:mm:ss a"));
// "09/05/2013 11:22:40 am"