Конвертировать дату (с 12/12/2011 в 12-е)
Я пытаюсь преобразовать дату в номер дня, за которым следуют "st", "nd", "rd" или "th" в зависимости от дня. Я новичок в javascript, поэтому понятия не имею, с чего начать.
Например
01.05.2011 = 1-е
05.02.2011 = 2-е
05.03.2011 = 3-ий
05.12.2011 = 12
22.05.2011 = 22-е
Спасибо
5 ответов
Сначала получите дату:
var date = myval.getDate();
Затем найдите суффикс:
function get_nth_suffix(date) {
switch (date) {
case 1:
case 21:
case 31:
return 'st';
case 2:
case 22:
return 'nd';
case 3:
case 23:
return 'rd';
default:
return 'th';
}
}
демо на http://jsfiddle.net/DZPSw/
var date = new Date('05/12/2011').getDate(),
ordinal = date + (date>10 && date<20 ? 'th' : {1:'st', 2:'nd', 3:'rd'}[date % 10] || 'th');
или же
ordinal = date + ( [,'st','nd','rd'][/1?.$/.exec(date)] || 'th' );
Вы можете начать с JavaScript Date/Time Functions, чтобы получить номер дня:
var theDate = myDateObj.GetDate(); // returns 1-31
Затем вам нужно будет написать правило, чтобы получить правильный суффикс. Большую часть времени это будет th
кроме исключений. Какие исключения? 1, 21, 31 = st
, 2, 22 = nd
, 3, 23 = rd
все остальное th
, Так что мы можем использовать мод %
проверить, заканчивается ли оно в 1, 2 или 3:
var nth = '';
if (theDate > 3 && theDate < 21) // catch teens, which are all 'th'
nth = theDate + 'th';
else if (theDate % 10 == 1) // exceptions ending in '1'
nth = theDate + 'st';
else if (theDate % 10 == 2) // exceptions ending in '2'
nth = theDate + 'nd';
else if (theDate % 10 == 3) // exceptions ending in '3'
nth = theDate + 'rd';
else
nth = theDate + 'th'; // everything else
Вот рабочая демонстрация, показывающая окончания для 1-31: http://jsfiddle.net/6Nhn8/
Или вы можете быть скучным и использовать библиотеку:-)
Я написал эту простую функцию на днях. Хотя для даты вам не нужны большие числа, это будет учитывать и более высокие значения (1013-е, 36021-е и т. Д.)
var fGetSuffix = function(nPos){
var sSuffix = "";
switch (nPos % 10){
case 1:
sSuffix = (nPos % 100 === 11) ? "th" : "st";
break;
case 2:
sSuffix = (nPos % 100 === 12) ? "th" : "nd";
break;
case 3:
sSuffix = (nPos % 100 === 13) ? "th" : "rd";
break;
default:
sSuffix = "th";
break;
}
return sSuffix;
};
Вы можете легко сделать это с помощью datejs, используя S
спецификатор формата.