4

我有一个 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();
}

日期选择器看起来很好,但行为很奇怪。

我在其中输入了一些日期,例如 2012 年 12 月 31 日为 12 月 31 日(注意我将格式指定为dd/mm/yy)并按下按钮。控制进入控制器,我看到该expirationDate变量保持31/12/2012值。然后操作返回,然后我看到文本框为空。

然后我尝试 2012 年 10 月 12 日 - 它开始执行操作,但是当页面再次显示时,它变成 2012 年 12 月 10 日 - 显然月份和日期被交换了。也许在 31/12 的情况下,它看到交换它们会产生一个无效的日期并丢弃它。

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

4

2 回答 2

5

这是我修复它的方法。我变了

$("#expirationDate").datepicker();
$("#expirationDate").datepicker("option", "dateFormat", "dd/mm/yy");

$("#expirationDate").datepicker({ dateFormat: 'dd/mm/yy' });

现在它工作得很好。

我的猜测是原始代码被破坏了。我没有制作原始代码,我在datepicker page上找到了它。

于 2012-12-07T12:08:15.457 回答
1

javascript格式dd/mm/yy01/12/2012

在 javascriptyy中具有相同的结果yyyy(这是因为getYear()不推荐使用getFullYear()

如果您只想获得年份的最后 2 位数字,则需要自己进行中断,无论是在 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");
于 2012-12-07T08:01:01.657 回答