相対時間
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;