상대 시간
Locale#relativeTime
은 dayjs#from
메서드에서 사용할 대체 문자열을 정의하는 객체입니다.
TIP
이 기능을 사용하려면 UpdateLocale 플러그인이 필요합니다.
dayjs.extend(updateLocale);
dayjs.updateLocale('en', {
relativeTime: {
future: '%s 후',
past: '%s 전',
s: '몇 초',
m: '1분',
mm: '%d분',
h: '한 시간',
hh: '%d시간',
d: '하루',
dd: '%d일',
M: '한 달',
MM: '%d개월',
y: '1년',
yy: '%d년',
},
});
Locale#relativeTime.future
는 미래 시점을 나타낼 때 사용되며, Locale#relativeTime.past
는 과거 시점을 나타낼 때 사용됩니다.
나머지 키의 경우, 단일 문자는 단수형을, 이중 문자는 복수형을 나타냅니다.
추가 토큰 처리
로케일에서 특정 토큰에 대해 추가적인 처리가 필요한 경우, 문자열 대신 다음과 같은 서명을 가진 함수를 토큰 값으로 설정할 수 있습니다. 이 함수는 문자열을 반환해야 합니다.
relativeTime: {
...,
yy: function (number, withoutSuffix, key, isFuture) {
return string;
}
}
number
인수는 해당 키에 대한 시간 단위를 나타냅니다. 예를 들어 m
의 경우 분을 나타냅니다.
withoutSuffix
인수는 접미사 없이 표시되는 경우 true
, 접미사와 함께 표시되는 경우 false
입니다. (기본 동작이 접미사와 함께 표시되므로 논리가 반전되어 있습니다.)
key
인수는 Locale#relativeTime
객체 내에서 사용되는 대체 키를 나타냅니다. (예: s
, m
, mm
, h
등)
isFuture
인수는 미래 시점을 나타내는 경우 true
, 과거 시점을 나타내는 경우 false
입니다.
상대 시간 임계값 및 반올림
이 플러그인을 사용할 때 구성 객체를 전달하여 임계값 및 반올림 설정을 변경할 수 있습니다.
var config = {
thresholds: [{}],
rounding: function () {
return Math.round(arguments[0]);
},
};
dayjs.extend(relativeTime, config);
thresholds
는 특정 시간 단위(초, 분, 시간 등)로 간주되는 기준을 정의하는 객체(Object
)의 배열(Array
)입니다. 예를 들어, 기본적으로 45초 이상은 1분으로 간주되고, 22시간 이상은 하루로 간주됩니다. 이 기준을 변경하려면 다음과 같이 새로운 thresholds
를 전달하면 됩니다.
// 엄격한 임계값
var thresholds = [
{ l: 's', r: 1 },
{ l: 'm', r: 1 },
{ l: 'mm', r: 59, d: 'minute' },
{ l: 'h', r: 1 },
{ l: 'hh', r: 23, d: 'hour' },
{ l: 'd', r: 1 },
{ l: 'dd', r: 29, d: 'day' },
{ l: 'M', r: 1 },
{ l: 'MM', r: 11, d: 'month' },
{ l: 'y', r: 1 },
{ l: 'yy', d: 'year' },
];
사용자 정의 임계값 키를 추가하고, 그에 맞춰 로케일을 업데이트할 수도 있습니다.
var thresholds = [
...,
{ l: 'ss', r: 59, d: 'second' }
]
dayjs.updateLocale('en', {
relativeTime: {
...,
ss: "%d seconds"
}
})
rounding
은 숫자를 relativeTime
형식 문자열에 적용하기 전에 처리하는 함수(Function
)입니다. 이 문자열은 로케일에 정의되어 있습니다. 반올림 방식을 변경하려면 다음과 같이 새로운 rounding
함수를 전달하면 됩니다.
// 기본적으로 Math.round
var rounding = Math.floor;