【问题标题】:Why does jQueryUI datepicker swap day and month on page reload?为什么jQueryUI datepicker在页面重新加载时交换日期和月份?
【发布时间】:2012-12-07 07:54:19
【问题描述】:

我有一个 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 日 - 它开始执行操作,但是当页面再次显示时,它变成了 12/10/2012 - 显然月份和日期被交换了。也许在 31/12 的情况下,它发现交换它们会产生一个无效的日期并丢弃它。

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

【问题讨论】:

  • 你在用什么datepicker?该插件的主页是什么?我确定"option", "dateFormat", "dd/mm/yy" 无效!也许.datepicker({"dateFormat": "dd/mm/yy"}) 会是一个更好的尝试选择。
  • @balexandre:这个jqueryui.com/datepicker
  • @balexandre 对于 jqueryui datepicker 选项是正确的行为
  • @CoolEsh 在我询问时他没有指定 :) 我从不使用 jQuery UI,我更喜欢 Bootstrap datepicker :)

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


【解决方案1】:

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

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

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

现在它工作得很好。

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

【讨论】:

    【解决方案2】:

    dd/mm/yy 的 javascript 格式为 01/12/2012

    在 javascript 中 yyyyyy 具有相同的结果(这是因为 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");
    

    【讨论】:

    • 我的问题不在于检索值,我的问题是当页面重新加载时,值会以某种方式发生变化。
    • 但是你没有在重新加载时给出值......你应该有类似的东西:@Html.TextBox("expirationDate", Model.expirationDate) 或者只是@Html.TextBoxFor(Model.expirationDate)
    • MVC3 有一些自动映射的魔力。还有自动映射 - 当我最初有 2012 年 10 月 12 日时,我在重新加载时得到 12/10/2012,所以它没有丢失,只是改变了。
    • 好吧,看来我已经以一种出乎意料的方式解决了这个问题 - 请参阅我的答案。
    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多