在jquery datepicker中添加“st,nd,rd,th”

11

如何在日期格式中添加st、nd、rd和th,例如11月19日或12月2日等。

目前,我有以下代码

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

该格式依赖于formatDate(),查看文档,它似乎不支持该特定格式。 - Clive
8个回答

14

由于formatDate()没有该选项。

编辑: 是的,你说得对,抱歉我的回答没能帮到你,我是 SO 的新手。 这次我希望可以帮到你 :)

在datepicker初始化中添加一个onSelect函数,类似于这样:

$("#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);
    }
});

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


那个链接似乎也没有得到回答。 - dave
2
对我来说完美地工作了,尽管你还应该为情况 2131 应用 'st',为 22 应用 'nd',为 23 应用 'rd'。由于 JavaScript 在 case 语句上一直掉落,直到它看到一个 break,所以你可以在 case '1':suffix 之间添加 case '21': case '31':(对于其他数字也是如此)。 - stevendesu

5

Chris West提供了一个生成所有整数序数的函数,这个函数非常简洁明了。在这个页面上,他甚至展示了如何轻松使用他的函数将序数添加到字符串中的所有数字。


2
根据语法规则,在显示日期时不应添加“th”、“nd”、“rd”和“st”,例如“March 3”或“April 31, 2003”。只有在显示“三月六日”或“六月二十三日”等情况下才使用这些字词。更多信息请参见此链接

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';
}
};

0

0

这个有帮助吗?

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

0

我知道这是一个老问题,但我想发布我的解决方案,以防有人遇到同样的问题并找到了这篇文章。这种方法在打开日历等操作时不会破坏所选日期。它使用格式d{后缀} M yy,即“30th Sep 2013”

$.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(' ');
    }
  }
});

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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接