Добавление "st, nd, rd, th" в jquery datepicker - PullRequest
11 голосов
/ 20 ноября 2011

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

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

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

Ответы [ 8 ]

14 голосов
/ 20 ноября 2011

Поскольку formatDate () не имеет этой опции.

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

Добавьте функцию onSelect к initpicker для даты, что-то вроде этого:

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

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

5 голосов
/ 10 октября 2012

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

2 голосов
/ 20 марта 2013

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

См. это для получения дополнительной информации.

2 голосов
/ 11 августа 2012
    // 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 голосов
/ 03 февраля 2014

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));
}
0 голосов
/ 30 сентября 2013

Я понимаю, что это старый вопрос, но я решил опубликовать свое решение на тот случай, если кто-то с такой же проблемой найдет этот пост.Этот метод не прерывает выбранную дату при открытии календаря и т. Д. При этом используется формат d {суффикс} Мгг, т. Е. «30 сентября 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 голосов
/ 05 февраля 2013

Это помогает?

do = day + ((20 - day >= 0) ? "th" : ["st","nd","rd"][(day % 10) - 1] || "th");
console.log(do);
0 голосов
/ 20 ноября 2011

Ознакомьтесь с этим запросом на выдачу в репозитории jqueryui: https://github.com/jquery/jquery-ui/pull/438

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...