숫자에 st, nd, rd 및 th(일반) 접미사를 추가합니다.
현재 날짜를 기준으로 텍스트 문자열을 동적으로 생성하려고 합니다.예를 들어, 1일째의 경우, 코드로 「Its the <dynamic> 1*<dynamic string>st</dynamic string>*</dynamic>」를 생성해 주세요.
총 12일이기 때문에, 이하의 작업을 실시했습니다.
12일 동안 루프하는 for 루프를 설정했습니다.
html에서는 요소를 대상으로 하는 고유 ID를 지정했습니다.아래를 참조해 주십시오.
<h1 id="dynamicTitle" class="CustomFont leftHeading shadow">On The <span></span> <em>of rest of generic text</em></h1>
다음으로 for 루프 내부에는 다음과 같은 코드가 있습니다.
$("#dynamicTitle span").html(i); var day = i; if (day == 1) { day = i + "st"; } else if (day == 2) { day = i + "nd" } else if (day == 3) { day = i + "rd" }
갱신하다
이것은 요구대로의 for 루프 전체입니다.
$(document).ready(function () {
for (i = 1; i <= 12; i++) {
var classy = "";
if (daysTilDate(i + 19) > 0) {
classy = "future";
$("#Day" + i).addClass(classy);
$("#mainHeading").html("");
$("#title").html("");
$("#description").html("");
} else if (daysTilDate(i + 19) < 0) {
classy = "past";
$("#Day" + i).addClass(classy);
$("#title").html("");
$("#description").html("");
$("#mainHeading").html("");
$(".cta").css('display', 'none');
$("#Day" + i + " .prizeLink").attr("href", "" + i + ".html");
} else {
classy = "current";
$("#Day" + i).addClass(classy);
$("#title").html(headings[i - 1]);
$("#description").html(descriptions[i - 1]);
$(".cta").css('display', 'block');
$("#dynamicImage").attr("src", ".." + i + ".jpg");
$("#mainHeading").html("");
$(".claimPrize").attr("href", "" + i + ".html");
$("#dynamicTitle span").html(i);
var day = i;
if (day == 1) {
day = i + "st";
} else if (day == 2) {
day = i + "nd"
} else if (day == 3) {
day = i + "rd"
} else if (day) {
}
}
}
규칙은 다음과 같습니다.
- st는 1로 끝나는 숫자와 함께 사용됩니다(예: 첫 번째, 먼저 발음됨).
- nd는 2로 끝나는 숫자와 함께 사용됩니다(예: 92번째, 902번째 발음).
- rd는 3으로 끝나는 숫자와 함께 사용됩니다(예: 33번째, 33번째 발음).
- 상기 규칙의 예외로서 11, 12 또는 13으로 끝나는 모든 "10" 숫자는 -th를 사용합니다(예: 11번째, 11번째, 112번째, 100 [및] 12번째).
- th는 다른 모든 번호(예: 9번째, 9번째 발음)에 사용됩니다.
다음 JavaScript 코드(2014년 6월 개정)가 이를 실현합니다.
function ordinal_suffix_of(i) {
var j = i % 10,
k = i % 100;
if (j == 1 && k != 11) {
return i + "st";
}
if (j == 2 && k != 12) {
return i + "nd";
}
if (j == 3 && k != 13) {
return i + "rd";
}
return i + "th";
}
0 ~ 115 의 숫자의 출력 예:
0 0th
1 1st
2 2nd
3 3rd
4 4th
5 5th
6 6th
7 7th
8 8th
9 9th
10 10th
11 11th
12 12th
13 13th
14 14th
15 15th
16 16th
17 17th
18 18th
19 19th
20 20th
21 21st
22 22nd
23 23rd
24 24th
25 25th
26 26th
27 27th
28 28th
29 29th
30 30th
31 31st
32 32nd
33 33rd
34 34th
35 35th
36 36th
37 37th
38 38th
39 39th
40 40th
41 41st
42 42nd
43 43rd
44 44th
45 45th
46 46th
47 47th
48 48th
49 49th
50 50th
51 51st
52 52nd
53 53rd
54 54th
55 55th
56 56th
57 57th
58 58th
59 59th
60 60th
61 61st
62 62nd
63 63rd
64 64th
65 65th
66 66th
67 67th
68 68th
69 69th
70 70th
71 71st
72 72nd
73 73rd
74 74th
75 75th
76 76th
77 77th
78 78th
79 79th
80 80th
81 81st
82 82nd
83 83rd
84 84th
85 85th
86 86th
87 87th
88 88th
89 89th
90 90th
91 91st
92 92nd
93 93rd
94 94th
95 95th
96 96th
97 97th
98 98th
99 99th
100 100th
101 101st
102 102nd
103 103rd
104 104th
105 105th
106 106th
107 107th
108 108th
109 109th
110 110th
111 111th
112 112th
113 113th
114 114th
115 115th
function getNumberWithOrdinal(n) {
var s = ["th", "st", "nd", "rd"],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
}
[-4,-1,0,1,2,3,4,10,11,12,13,14,20,21,22,100,101,111].forEach(
n => console.log(n + ' -> ' + getNumberWithOrdinal(n))
);
서수 접미사에 대한 최소 한 줄 접근법
function nth(n){return["st","nd","rd"][((n+90)%100-10)%10-1]||"th"}
(이는 양의 정수에 대한 것입니다. 다른 변형에 대해서는 아래를 참조하십시오.)
설명.
가 합니다.["st", "nd", "rd"]
(11,를 0, 2.1 2, 3으로 (11, 12, 13으로 끝나는 정수). 0, 1, 2로 매핑합니다.
정수(11,는 다른 수 있습니다. 는 '하다(11, 12, 13)'로 됩니다.배열에서 찾을 수 없는 인덱스는 다음과 같이 평가됩니다.undefined
(javascript)를 합니다.|| "th"
이 표현은 됩니다.)"th"
우리가 원하는 정수에 대한 정보를 제공합니다.
.((n + 90) % 100 - 10) % 10 - 1
매핑을 수행합니다.★★★★
(n + 90) % 100
: 이 - 10 mod 100, , ...to , 0 ..., 9 to 99 를 10 mod 100, 10 to 0, ...99 to 89, 0 to 90, ..., 9 to 99 。이제 11, 12, 13으로 끝나는 정수는 하단(1, 2, 3에 매핑됨)에 있습니다.- 10
에서 80, ...에서 89로 : 10 - - 10 、 19 、 - 1, 99 7979 、 0 、 80 、 ...9시 89분이다.정수(-.% 10
1, 2, 2, 모든 , , -7에 이제 1, 2, 3으로 끝나는 모든 정수는 1, 2, 3에 매핑됩니다.다른 모든 정수는 다른 정수에 매핑됩니다(11, 12, 13은 -9, -8, -7에 매핑됩니다).- 1
1, 0,1. : 1 면 1, 2, 3 서 0, 1, 2 의 로 : 。
동작 확인
function nth(n){return["st","nd","rd"][((n+90)%100-10)%10-1]||"th"}
//test integers from 1 to 124
for(var r = [], i = 1; i < 125; i++) r.push(i + nth(i));
//output result
document.getElementById('result').innerHTML = r.join('<br>');
<div id="result"></div>
바리에이션
음수 정수 허용:
function nth(n){return["st","nd","rd"][(((n<0?-n:n)+90)%100-10)%10-1]||"th"}
function nth(n){return["st","nd","rd"][(((n<0?-n:n)+90)%100-10)%10-1]||"th"}
//test integers from 15 to -124
for(var r = [], i = 15; i > -125; i--) r.push(i + nth(i));
//output result
document.getElementById('result').innerHTML = r.join('<br>');
<div id="result"></div>
ES6 팻 화살표 구문(익명 함수):
n=>["st","nd","rd"][(((n<0?-n:n)+90)%100-10)%10-1]||"th"
갱신하다
양의 정수에 대한 훨씬 더 짧은 대안은 식이다.
[,'st','nd','rd'][n%100>>3^1&&n%10]||'th'
업데이트 2
[,'st','nd','rd'][n/10%10^1&&n%10]||'th'
Intl.PluralRules
, 표준 메서드.
아무도 모르는 것 같기 때문에, 여기서 이 일을 하는 표준적인 방법을 그만 두고 싶습니다.
코드를 원하는 경우
- 자중자
- 현지화하기 쉽다
- 현대적 기준으로는
- 이렇게 가는 거야.
const english_ordinal_rules = new Intl.PluralRules("en", {type: "ordinal"});
const suffixes = {
one: "st",
two: "nd",
few: "rd",
other: "th"
};
function ordinal(number/*: number */) {
const category = english_ordinal_rules.select(number);
const suffix = suffixes[category];
return (number + suffix);
} // -> string
const test = Array(201)
.fill()
.map((_, index) => index - 100)
.map(ordinal)
.join(" ");
console.log(test);
코드 골프
당신의 코드로 골프를 쳐서 가독성을 떨어뜨리는 것은 추천하지 않지만, 저는 그 골퍼들을 위해 하나를 생각해냈습니다(92바이트).
n=>n+{e:"st",o:"nd",w:"rd",h:"th"}[new Intl.PluralRules("en",{type:"ordinal"}).select(n)[2]]
모멘트 라이브러리의 로컬 데이터 기능을 사용할 수 있습니다.
코드:
moment.localeData().ordinal(1)
//1st
로 하면 두 를 쉽게 할 수 .array[0]
★★★★★★★★★★★★★★★★★」array[1]
.
가 array[1] = 1
'th', 'th'가 요.
function getDaySuffix(num)
{
var array = ("" + num).split("").reverse(); // E.g. 123 = array("3","2","1")
if (array[1] != "1") { // Number is not in the teens
switch (array[0]) {
case "1": return "st";
case "2": return "nd";
case "3": return "rd";
}
}
return "th";
}
12일밖에 안 남았어요?단순한 룩업 어레이로 하고 싶다.
var suffixes = ['','st','nd','rd','th','th','th','th','th','th','th','th','th'];
그리고나서
var i = 2;
var day = i + suffixes[i]; // result: '2nd'
또는
var i = 8;
var day = i + suffixes[i]; // result: '8th'
function getSuffix(n) {return n < 11 || n > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((n - 1) % 10, 3)] : 'th'}
이 문제를 해결하기 위해 이 함수를 작성했습니다.
// this is for adding the ordinal suffix, turning 1, 2 and 3 into 1st, 2nd and 3rd
Number.prototype.addSuffix=function(){
var n=this.toString().split('.')[0];
var lastDigits=n.substring(n.length-2);
//add exception just for 11, 12 and 13
if(lastDigits==='11' || lastDigits==='12' || lastDigits==='13'){
return this+'th';
}
switch(n.substring(n.length-1)){
case '1': return this+'st';
case '2': return this+'nd';
case '3': return this+'rd';
default : return this+'th';
}
};
그냥 with with 、 with 、 with with 。.addSuffix()
을 사용법예를 들어 다음과 같습니다.
var number=1234;
console.log(number.addSuffix());
// console will show: 1234th
const getOrdinalNum = (n) => n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : '');
서수 함수의 다른 버전은 다음과 같습니다.
function toCardinal(num) {
var ones = num % 10;
var tens = num % 100;
if (tens < 11 || tens > 13) {
switch (ones) {
case 1:
return num + "st";
case 2:
return num + "nd";
case 3:
return num + "rd";
}
}
return num + "th";
}
변수 이름은 보다 명시적으로 지정되며, camel case 규칙을 사용하며, 더 빠를 수 있습니다.
이 간단한 함수는 얼마 전에 작성했습니다.큰 숫자는 필요 없지만, 이 값은 높은 값(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;
};
function ordsfx(a){return["th","st","nd","rd"][(a=~~(a<0?-a:a)%100)>10&&a<14||(a%=10)>3?0:a]}
주석이 달린 버전은 https://gist.github.com/furf/986113#file-annotated-js 에서 참조해 주세요.
유틸리티 기능처럼 짧고, 달콤하고, 효율적입니다.부호화/부호화되지 않은 정수/플로트와 함께 작동합니다(플로트를 서수로 만들 필요는 상상할 수 없지만).
뛰어난 date-fns 라이브러리를 강력히 추천합니다.고속 모듈러, 불변, 표준 날짜에 대응.
import * as DateFns from 'date-fns';
const ordinalInt = DateFns.format(someInt, 'do');
date-fns 문서를 참조해 주세요.https://date-fns.org/v2.0.0-alpha.9/docs/format
링크에서 이용할 수 있는 답변을 인용하고 싶습니다.
function ordinal(n) {
var s = ["th", "st", "nd", "rd"];
var v = n%100;
return n + (s[(v-20)%10] || s[v] || s[0]);
}
여기 또 다른 옵션이 있습니다.
function getOrdinalSuffix(day) {
if(/^[2-3]?1$/.test(day)){
return 'st';
} else if(/^[2-3]?2$/.test(day)){
return 'nd';
} else if(/^[2-3]?3$/.test(day)){
return 'rd';
} else {
return 'th';
}
}
console.log(getOrdinalSuffix('1'));
console.log(getOrdinalSuffix('13'));
console.log(getOrdinalSuffix('22'));
console.log(getOrdinalSuffix('33'));
10대들의 예외에 주목하세요?10대들은 정말 악랄해!
편집: 11일과 12일을 잊어버렸습니다.
내 물건을 위해 만든 오래된 것...
function convertToOrdinal(number){
if (number !=1){
var numberastext = number.ToString();
var endchar = numberastext.Substring(numberastext.Length - 1);
if (number>9){
var secondfromendchar = numberastext.Substring(numberastext.Length - 1);
secondfromendchar = numberastext.Remove(numberastext.Length - 1);
}
var suffix = "th";
var digit = int.Parse(endchar);
switch (digit){
case 3:
if(secondfromendchar != "1"){
suffix = "rd";
break;
}
case 2:
if(secondfromendchar != "1"){
suffix = "nd";
break;
}
case 1:
if(secondfromendchar != "1"){
suffix = "st";
break;
}
default:
suffix = "th";
break;
}
return number+suffix+" ";
} else {
return;
}
}
이 함수는 높은 숫자와 모든 테스트 케이스를 위해 작성했습니다.
function numberToOrdinal(num) {
if (num === 0) {
return '0'
};
let i = num.toString(), j = i.slice(i.length - 2), k = i.slice(i.length - 1);
if (j >= 10 && j <= 20) {
return (i + 'th')
} else if (j > 20 && j < 100) {
if (k == 1) {
return (i + 'st')
} else if (k == 2) {
return (i + 'nd')
} else if (k == 3) {
return (i + 'rd')
} else {
return (i + 'th')
}
} else if (j == 1) {
return (i + 'st')
} else if (j == 2) {
return (i + 'nd')
} else if (j == 3) {
return (i + 'rd')
} else {
return (i + 'th')
}
}
여기 조금 다른 방법이 있습니다(다른 답변에서는 그렇지 않습니다).좋아하는지 싫어하는지는 모르겠지만 효과가 있어!
export function addDaySuffix(day: number) {
const suffixes =
' stndrdthththththththththththththththththstndrdthththththththst';
const startIndex = day * 2;
return `${day}${suffixes.substring(startIndex, startIndex + 2)}`;
}
이 질문에 대한 기존 답변을 보완하기 위해 기능적인 답변을 제공하고자 합니다.
const ordinalSuffix = ['st', 'nd', 'rd']
const addSuffix = n => n + (ordinalSuffix[(n - 1) % 10] || 'th')
const numberToOrdinal = n => `${n}`.match(/1\d$/) ? n + 'th' : addSuffix(n)
특별한 값의 배열을 작성했습니다.중요한 것은 배열에 제로 베이스 인덱스가 있기 때문에 서수 서픽스[0]는 'st'와 같다는 것입니다.
우리의 함수 numberToOrdinal은 숫자가 10대 번호로 끝나는지 확인하고, 이 경우 숫자 서수가 모두 'th'이므로 숫자를 'th'로 추가합니다.숫자가 10대가 아닌 경우, 우리는 숫자를 서수에 더하는 addSuffix에 넘깁니다.서수에는 숫자 빼기 1(제로 기반 인덱스를 사용하기 때문에) mod 10이 나머지 2 이하를 가지는지 여부에 따라 결정됩니다.그렇지 않으면 배열에서 "th"가 됩니다.
출력 예:
numberToOrdinal(1) // 1st
numberToOrdinal(2) // 2nd
numberToOrdinal(3) // 3rd
numberToOrdinal(4) // 4th
numberToOrdinal(5) // 5th
numberToOrdinal(6) // 6th
numberToOrdinal(7) // 7th
numberToOrdinal(8) // 8th
numberToOrdinal(9) // 9th
numberToOrdinal(10) // 10th
numberToOrdinal(11) // 11th
numberToOrdinal(12) // 12th
numberToOrdinal(13) // 13th
numberToOrdinal(14) // 14th
numberToOrdinal(101) // 101st
저는 이것을 강력히 추천합니다, 그것은 매우 쉽고 읽기 쉽습니다.도움이 됐으면 좋겠어요?
- 1 미만의 음의 정수를 사용하지 않고 false를 반환합니다.
- 입력이 0이면 0을 반환합니다.
function numberToOrdinal(n) {
let result;
if(n < 0){
return false;
}else if(n === 0){
result = "0";
}else if(n > 0){
let nToString = n.toString();
let lastStringIndex = nToString.length-1;
let lastStringElement = nToString[lastStringIndex];
if( lastStringElement == "1" && n % 100 !== 11 ){
result = nToString + "st";
}else if( lastStringElement == "2" && n % 100 !== 12 ){
result = nToString + "nd";
}else if( lastStringElement == "3" && n % 100 !== 13 ){
result = nToString + "rd";
}else{
result = nToString + "th";
}
}
return result;
}
console.log(numberToOrdinal(-111));
console.log(numberToOrdinal(0));
console.log(numberToOrdinal(11));
console.log(numberToOrdinal(15));
console.log(numberToOrdinal(21));
console.log(numberToOrdinal(32));
console.log(numberToOrdinal(43));
console.log(numberToOrdinal(70));
console.log(numberToOrdinal(111));
console.log(numberToOrdinal(300));
console.log(numberToOrdinal(101));
산출량
false
0
11th
15th
21st
32nd
43rd
70th
111th
300th
101st
이것은 es6의 라이너와 애호가들을 위한 것입니다.
let i= new Date().getDate
// I can be any number, for future sake we'll use 9
const j = I % 10;
const k = I % 100;
i = `${i}${j === 1 && k !== 11 ? 'st' : j === 2 && k !== 12 ? 'nd' : j === 3 && k !== 13 ? 'rd' : 'th'}`}
console.log(i) //9th
+be 번호의 다른 옵션은 다음과 같습니다.
console.log(["st","nd","rd"][((i+90)%100-10)%10-1]||"th"]
또, 순서 프레픽스를 삭제하려면 , 다음의 순서를 사용합니다.
console.log(i.parseInt("8th"))
console.log(i.parseFloat("8th"))
필요에 따라 자유롭게 변경 가능
<p>31<sup>st</sup> March 2015</p>
사용할 수 있습니다.
1<sup>st</sup> 2<sup>nd</sup> 3<sup>rd</sup> 4<sup>th</sup>
접미사를 배치하기 위해
언급URL : https://stackoverflow.com/questions/13627308/add-st-nd-rd-and-th-ordinal-suffix-to-a-number
'source' 카테고리의 다른 글
Symfony2 번들에 상대적인 파일 접근 (0) | 2023.01.19 |
---|---|
팬더 DataFrame의 컬럼을 여러 줄로 네스트(폭발)하는 방법 (0) | 2023.01.19 |
socket.io 및 node.disc를 사용하여 특정 클라이언트에 메시지를 보냅니다. (0) | 2023.01.19 |
Vue 3에서 Vuex 4용 Web 소켓 플러그인 구현(소켓 라이브러리에 의존하지 않음) (0) | 2023.01.19 |
JSON 키 이름에 유효한 문자와 유효하지 않은 문자는 무엇입니까? (0) | 2023.01.19 |