Добавление "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.
Ответ 5
Посмотрите этот запрос на запрос на jqueryui repo: https://github.com/jquery/jquery-ui/pull/438
Ответ 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));
}