将“st,nd,rd,th”添加到jquery datepicker

时间:2011-11-20 03:14:41

标签: jquery jquery-ui datepicker

如何添加st,nd,rd,th日期格式..即11月19日或12月2日等。

目前,我有以下代码

    $( "#datepicker" ).datepicker({
        altField: "#alternate",
        altFormat: "DD, MM d ",
                    minDate: +0
    });

8 个答案:

答案 0 :(得分:14)

由于formatDate()没有该选项。

编辑: 是的,你是对的,对不起,我的回答没有帮助你,我是新来的。 我希望这次有所帮助:)

将一个onSelect函数添加到datepicker init,如下所示:

$("#datepicker").datepicker({
    altField: "#alternate",
    altFormat: "DD, MM d",
    minDate: +0,
    onSelect: function(dateText, inst) {
        var suffix = "";
        switch(inst.selectedDay) {
            case '1': case '21': case '31': suffix = 'st'; break;
            case '2': case '22': suffix = 'nd'; break;
            case '3': case '23': suffix = 'rd'; break;
            default: suffix = 'th';
        }

        $("#alternate").val($("#alternate").val() + suffix);
    }
});

每次选择日期时,它都会在备用字段中添加后缀。

答案 1 :(得分:5)

Chris West对于一个为所有整数生成序数的函数有一个非常简短的定义。在this page,他甚至展示了如何轻松地使用他的函数将序数添加到字符串中的所有数字。

答案 2 :(得分:2)

    // Get the ordinal suffix for the given int value
var ordinalSuffix = function (val) {
var mod = val % 10;
if (mod === 1 && val !== 11) {
return 'st';
} else if (mod === 2 && val !== 12) {
return 'nd';
} else if (mod === 3 && val !== 13) {
return 'rd';
} else {
return 'th';
}
};

答案 3 :(得分:2)

根据语法规则,你不应该在显示日期时添加“th”,“nd”,“rd”和“st”,如“March 3”或“April 31,2003”。您只在显示“3月6日”或“6月23日”时使用这些。

有关详细信息,请参阅this

答案 4 :(得分:0)

在jqueryui repo:https://github.com/jquery/jquery-ui/pull/438

上查看此拉取请求

答案 5 :(得分:0)

这有帮助吗?

do = day + ((20 - day >= 0) ? "th" : ["st","nd","rd"][(day % 10) - 1] || "th");
console.log(do);

答案 6 :(得分:0)

我意识到这是一个古老的问题,但我想我会发布我的解决方案,以防任何有相同问题的人发现这篇文章。打开日历等时,此方法不会中断所选日期。这使用格式d {suffix} M yy,即'2013年9月30日'

$.datepicker.origParseDate = $.datepicker.parseDate;
$.datepicker.parseDate = function(format, value, settings) {
  if ( $.isPlainObject(format) && format.hasOwnProperty('parse') && $.isFunction(format.parse) ) {
    return format.parse.call(this, value, settings, $.datepicker.origParseDate);
  } else {
    $.datepicker.origParseDate(format, value, settings);
  }
};
$.datepicker.origFormatDate = $.datepicker.formatDate;
$.datepicker.formatDate = function(format, date, settings) {
  if ( $.isPlainObject(format) && format.hasOwnProperty('format') && $.isFunction(format.format) ) {
    return format.format.call(this, date, settings, $.datepicker.origFormatDate);
  } else {
    $.datepicker.origFormatDate(format, date, settings);
  }
};

$('.datepicker').datepicker({
  dateFormat: {
    parse: function(value, settings, originalParseDate) {
      value = value.replace(/[a-z][^\s]+/, '');
      return originalParseDate.call(this, 'd M yy', value, settings);
    },
    format: function(date, settings, originalFormatDate) {
      date = originalFormatDate.call(this, 'd M yy', date, settings).split(' ');
      date[0] += (function(n) {
        n = (+n % 100).toString().split('');
        if (n.length > 1 && n.shift() === '1' || +n[0] > 3) {
          return 'th';
        } else {
          return ['th', 'st', 'nd', 'rd'][+n[0]];
        }
      })(date[0]);
      return date.join(' ');
    }
  }
});

答案 7 :(得分:0)

dateFormat不使用“s”作为格式类型,所以在我通常添加的选项中 -

dateFormat : "DD ds MM, yy",
onSelect: function(dateText, inst) {
    var arrOrd = new Array('0','st','nd','rd','th','th','th','th','th','th','th','th','th','th','th','th','th','th','th','th','th','st','nd','rd','th','th','th','th','th','th','th','st');
    var day = Number(inst.selectedDay);
    var suffix = arrOrd[day];       
    $(this).val($(this).val().replace(inst.selectedDay+"s",inst.selectedDay+suffix));
}