相対時間
Locale#relativeTime
は、dayjs#from
で使用される置換文字列をまとめたオブジェクトです。
TIP
これを使用するには、UpdateLocale プラグインが必要です。
dayjs.extend(updateLocale);
dayjs.updateLocale('en', {
relativeTime: {
future: 'in %s', // 未来 (例: in 5 minutes)
past: '%s ago', // 過去 (例: 5 minutes ago)
s: 'a few seconds', // 数秒
m: 'a minute', // 1分
mm: '%d minutes', // %d分
h: 'an hour', // 1時間
hh: '%d hours', // %d時間
d: 'a day', // 1日
dd: '%d days', // %d日
M: 'a month', // 1ヶ月
MM: '%d months', // %dヶ月
y: 'a year', // 1年
yy: '%d years', // %d年
},
});
Locale#relativeTime.future
は、未来の日付に対する接頭辞または接尾辞を表します。Locale#relativeTime.past
は、過去の日付に対する接頭辞または接尾辞を表します。
それ以外の場合、キーが 1 文字の場合は単数形、2 文字の場合は複数形を意味します。
追加のトークン処理
ロケールがトークンに対して特別な処理を必要とする場合、文字列の代わりに、次のシグネチャを持つ関数としてトークンを設定できます。関数は文字列を返す必要があります。
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
}
dayjs.extend(relativeTime, config)
thresholds
は、ある単位を分、時間などとみなすかを定義する Object
の Array
です。例えば、デフォルトでは、45 秒を超えると 1 分、22 時間を超えると 1 日として扱われます。これらの値を変更するには、次のように新しい 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;