【问题标题】:Jquery UI and HTML5 datepicker - date not formatting correctlyJquery UI 和 HTML5 日期选择器 - 日期格式不正确
【发布时间】:2013-06-26 12:08:32
【问题描述】:

我正在尝试制作一个日期选择器,它将适用于已实现 html5 规范的浏览器,并为那些没有实现的浏览器提供 jquery ui 日期选择器。

到目前为止我有:

<input type="date" id="TargetDate1" name="TargetDate1" class="date" value="2013-06-29" min="2013-06-26" max="2016-06-26" required="required" autocomplete="off">

在 Chrome27 中运行良好,提供原生 html5 控件,并在选择之前和之后以英国格式 dd/mm/yyyy 正确格式化日期。我正在使用以下 jquery 来提供 jquery ui 日期选择器:

 if (Modernizr.inputtypes.date === false) {
     $('.date').datepicker({
         changeMonth: true,
         changeYear: true,
         minDate: 0,
         maxDate: "+3Y"
     }).prop("min", "").prop("max", "");
 }

我还使用了以下国际化文件来格式化日期,并尝试在上面指定 dateFormat: 'dd/mm/yy'。

/*global jQuery */

/* English/UK initialisation for the jQuery UI date picker plugin. */
/* Written by Stuart. */
jQuery(function ($) {
     $.datepicker.regional['en-GB'] = {
          closeText: 'Done',
          prevText: 'Prev',
          nextText: 'Next',
          currentText: 'Today',
          monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'],
          monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
          dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',         
    'Friday',     'Saturday'],
          dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
          dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
          weekHeader: 'Wk',
          dateFormat: 'dd/mm/yy',
          firstDay: 1,
          isRTL: false,
          showMonthAfterYear: false,
          yearSuffix: ''
     };
     $.datepicker.setDefaults($.datepicker.regional['en-GB']);
});

在非 html5 浏览器中,当用户使用 Jquery UI 日期选择器选择日期(例如在 FF22 中)时,它会以正确的格式提供日期:dd/mm/yyyy 到表单。问题是最初加载表单时,日期的格式是 yyyy-mm-dd 格式,这是不正确的。

是否有让 jquery 或其他方法为所有场景正确格式化日期?

我还注意到,通过将 min="2013-06-26" max="2016-06-26" 指定为 FF,它不会让我保存数据,除非它再次采用 yyyy-mm-dd 格式.因此,在上面的 jquery 中它会将其空白。如果有人有办法在 jquery 中使用 html5 标记,或者不必清除最小值/最大值,那将很有用。谢谢

【问题讨论】:

  • 您的日期选择器是否在 FF22 中工作?对我来说它不起作用?你能查一下吗?
  • 嗨,是的,它工作正常。我正在使用最新的 jquery。
  • 如果可能的话,做一个 JSFiddle,我无法得到它。
  • 我明白了。一些澄清,在Firefox中显示为2013-06-29,在chrome中显示为29-06-2013,您的期望是什么?

标签: jquery html


【解决方案1】:

根据您的 cmets,您需要为不受支持的浏览器设置 dd/mm/yyyy 日期格式。

如果这是正确的,那么试试下面的一个。

$(document).ready(function () {
    if (Modernizr.inputtypes.date === false) {
        var date = new Date($('#TargetDate1').val());
        $('#TargetDate1').val(("0" + date.getDate()).slice(-2) + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + date.getFullYear());
        $('.date').datepicker({
            changeMonth: true,
            changeYear: true,
            minDate: 0,
            maxDate: "+3Y"
        }).prop("min", "").prop("max", "");
    }
});

要更改日期格式,您需要这样做:

var date = new Date($('#TargetDate1').val());
$('#TargetDate1').val(("0" + date.getDate()).slice(-2) + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + date.getFullYear());

JSFiddle中的演示

【讨论】:

  • 太好了,我显然误解了Jquery datepicker 中dateFormat: 'dd/mm/yy' 的用途。我认为这是为了为您进行格式化。
  • if (Modernizr.inputtypes.date === false) { $('.date').each(function () { $(this).datepicker({ changeMonth: true, changeYear: true , minDate: 0, maxDate: "+3Y" }).prop("min", "").prop("max", ""); var targetDate = $(this).val(); if (targetDate ! == "") { var date = new Date(targetDate); $(this).val(("0" + date.getDate()).slice(-2) + "/" + ("0" + ( date.getMonth() + 1)).slice(-2) + "/" + date.getFullYear()) } }); }
  • @johnstaveley 很高兴能提供帮助。
  • @johnstaveley +1 表示有兴趣,更新您的最终代码。
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多