Добавление "st, nd, rd, th" в jquery datepicker

Как я могу добавить формат st, nd, rd, th в дату... например, 19 ноября или 2 декабря и т.д.

В настоящее время у меня есть следующий код

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

Ответ 1

Так как formatDate() не имеет этой опции.

Изменить: Да, вы были правы, извините, что мой ответ вам не помог, я новичок в SO. Надеюсь, это поможет на этот раз:)

Добавить функцию 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);
    }
});

Он добавляет суффикс к альтернативному полю каждый раз, когда вы выбираете дату.

Ответ 2

У Криса Уэста довольно короткое и сладкое определение для функции, которая генерирует ординалы для всех целых чисел. На этой странице он даже показывает, как вы можете легко использовать свою функцию для добавления ординалов ко всем числам в строке.

Ответ 3

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

Ответ 4

В соответствии с правилами грамматики вы не должны добавлять "th", "nd", "rd" и "st" к датам при отображении их как "3 марта" или "31 апреля 2003 года". Вы используете их только в том случае, если вы показываете "6 марта" или "23 июня".

Для получения дополнительной информации см. this.

Ответ 6

Помогает ли это?

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

Ответ 7

Я понимаю, что это старый вопрос, но я думал, что опубликую свое решение в случае, если кто-то из тех же проблем найдет этот пост. Этот метод не нарушает выбранную дату при открытии календаря и т.д. Это использует формат d {suffix} M yy i.e. '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(' ');
    }
  }
});

Ответ 8

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