我有一个MVC3应用程序,其中一个页面有jQuery datepicker:
<script>
$(function () {
$("#expirationDate").datepicker();
$("#expirationDate").datepicker("option", "dateFormat", "dd/mm/yy");
});
</script>
using (Html.BeginForm())
{
@Html.TextBox("expirationDate")
<input type="submit" value="Submit" />
}
控制器动作如下:
public ActionResult DoStuff(String expirationDate)
{
return View();
}
datepicker看起来很好,但表现得很奇怪。
我输入了一些日期,例如12月31日的2012年12月31日(注意我将格式指定为dd/mm/yy
)并按下按钮。控制进入控制器,我看到expirationDate
变量保持31/12/2012
值。然后操作返回,然后我看到文本框为空。
然后我尝试10/12/2012 - 它进入操作但是当页面再次显示时它变成12/10/2012 - 显然月份和日期被交换。也许在31/12的情况下,它看到交换它们会产生无效的日期并且放弃它。
尽管明确指定了格式,为什么要交换日期和月份?
答案 0 :(得分:3)
以下是我修复它的方法。我改变了
$("#expirationDate").datepicker();
$("#expirationDate").datepicker("option", "dateFormat", "dd/mm/yy");
到
$("#expirationDate").datepicker({ dateFormat: 'dd/mm/yy' });
现在它工作得很好。
我的猜测是原始代码被破坏了。我没有制作原始代码,我在the datepicker page找到了它。
答案 1 :(得分:1)
javascript格式dd/mm/yy
为01/12/2012
yy
中的与yyyy
的结果相同(这是因为getYear()
已被弃用,而不是getFullYear()
如果你只想得到一年中的最后两位数字,你需要自己做一下,在javascript中,如:
$(function() {
$( "#datepicker" ).datepicker({
changeMonth: true,
onClose: function( selectedDate ) {
var dt = new Date(selectedDate),
txt = (dt.getDate() + 100).toString().slice(1) + "/" +
(dt.getMonth() + 101).toString().slice(1) + "/" +
(dt.getFullYear()).toString().slice(2);
$( "#datepicker" ).val(txt);
}
});
$( "#datepicker" ).datepicker(
"option", "dateFormat", "dd/mm/yy"
);
});
但你指定你使用ASP.NET,我宁愿在.NET中完成它
string dt = Request["expirationDate],
expDate = DateTime.Parse(dt).ToString("dd/mm/yy");