Конвертировать дату (с 12.05.2011 в 12 числа) - PullRequest
6 голосов
/ 14 мая 2011

Я пытаюсь преобразовать дату в номер дня, за которым следуют "st", "nd", "rd" или "th" в зависимости от дня. Я новичок в javascript, поэтому понятия не имею, с чего начать.

* 1003 Е.Г. *

05/01/2011 = 1-й
05.02.2011 = 2-е
05.03.2011 = 3-е
05.12.2011 = 12
22.05.2011 = 22 * ​​1009 *

Спасибо

Ответы [ 5 ]

10 голосов
/ 14 мая 2011

Сначала получите дату:

 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/

9 голосов
/ 14 мая 2011
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' );
2 голосов
/ 14 мая 2011

Вы можете начать с Функции даты / времени JavaScript , чтобы получить номер дня:

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/

Или вы можете быть скучным и использовать библиотеку : -)

1 голос
/ 15 мая 2013

Я написал эту простую функцию на днях.Хотя для даты вам не нужны большие числа, это будет учитывать и более высокие значения (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;
};
0 голосов
/ 14 мая 2011

Вы можете легко сделать это с datejs , используя спецификатор формата S .

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