当前位置 : 主页 > 网页制作 > Bootstarp >

以2位数年份输入时,Bootstrap Datepicker默认为1900

来源:互联网 收集:自由互联 发布时间:2021-06-12
我在我的Bootstrap应用程序中的模态窗口中使用了一个日期选择器.我正在使用Stefan Petre的原始Datepicker.我使用鼠标在桌面和移动设备上构建它,它工作正常. 最近我有一个用户请求允许它也
我在我的Bootstrap应用程序中的模态窗口中使用了一个日期选择器.我正在使用Stefan Petre的原始Datepicker.我使用鼠标在桌面和移动设备上构建它,它工作正常.

最近我有一个用户请求允许它也可以使用键盘.我删除了readonly属性以允许用户在输入字段中输入日期.日期格式设置为“mm / dd / yyyy”.

当我输入像今天这样的日期时,比如这个“12/11/13”那么它将默认为1913.这不是一个大问题,因为我可以训练用户使用4位数,但我宁愿只有它默认为本世纪.

注意:这似乎只发生在4位数年份的日期格式.这似乎也在Stefan代码的新分支中以相同的方式发生.

注意:我使用的是Bootstrap 2.0.4.我正在测试Firefox.

这是它的样子:

发生这种情况是因为Bootstrap日期选择器使用的是 JavaScript Date objects.当您创建一个新的Date对象并传入两位数年份时,它将输出1900年(参见 Why does Javascript evaluate a 2-digit year of 00 as 1900 instead of 2000?)

您可以尝试调整datepicker源代码,但这可能太复杂了.

从我在http://www.eyecon.ro/bootstrap-datepicker/可以看到,没有为可选日期设置范围的选项,但您可以将格式更改为使用两位数年份.

在您的屏幕截图中,我可以看到,您使用的是“到达日期”的日期选择器,我认为这是将来的.在网站上有一个关于如何禁用过去日期的示例.

我希望有所帮助.

UPDATE

我已经为你的问题写了一个事件处理程序,应该可以解决这个问题.

Javascript于http://jsfiddle.net/pCYbd/1/

$("#dp").datepicker();

$("#dp").on("keyup", function(e) {
  var date, day, month, newYear, value, year;
  value = e.target.value;
  if (value.search(/(.*)\/(.*)\/(.*)/) !== -1) {
    date = e.target.value.split("/");
    month = date[0];
    day = date[1];
    year = date[2];
    if (year === "") {
      year = "0";
    }
    if (year.length < 4) {
      newYear = String(2000 + parseInt(year));
      $(this).datepicker("setValue", "" + month + "/" + day + "/" + newYear);
      if (year === "0") {
        year = "";
      }
      return $(this).val("" + month + "/" + day + "/" + year);
    }
  }
});

CoffeeScript于http://jsfiddle.net/pCYbd/2/年

$("#dp").datepicker()
$("#dp").on "keyup", (e) ->
  value = e.target.value
  if value.search(/(.*)\/(.*)\/(.*)/) != -1
    date = value.split("/")
    month = date[0]
    day = date[1]
    year = date[2]      
    year = "0" if year == ""
    if year.length < 4
      newYear = String(2000 + parseInt(year))
      $(@).datepicker("setValue", "#{month}/#{day}/#{newYear}")
      year = "" if year == "0"
      $(@).val("#{month}/#{day}/#{year}")

我的JavaScript技能不是最好的,但这应该有效.

网友评论