为什么jQueryUI datepicker在页面上重新加载日期和月份?

时间:2012-12-07 07:54:20

标签: javascript jquery asp.net-mvc-3 datepicker jquery-ui-datepicker

我有一个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的情况下,它看到交换它们会产生无效的日期并且放弃它。

尽管明确指定了格式,为什么要交换日期和月份?

2 个答案:

答案 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/yy01/12/2012

javascript 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");