相對時間
Locale#relativeTime
應為一個物件,用於定義 dayjs#from
方法中相對時間的替換字串。
TIP
這需要使用 UpdateLocale 外掛程式才能生效。
dayjs.extend(updateLocale);
dayjs.updateLocale('en', {
relativeTime: {
future: 'in %s',
past: '%s ago',
s: 'a few seconds',
m: 'a minute',
mm: '%d minutes',
h: 'an hour',
hh: '%d hours',
d: 'a day',
dd: '%d days',
M: 'a month',
MM: '%d months',
y: 'a year',
yy: '%d years',
},
});
Locale#relativeTime.future
用於表示未來日期的前綴/後綴。 Locale#relativeTime.past
用於表示過去日期的前綴/後綴。
對於其他所有情況,單個字元的鍵代表單數形式,雙字元的鍵代表複數形式。
額外的 Token 處理
如果某個 locale 需要對 token 進行額外的處理,可以將 token 的值設定為一個函數,而不是字串。 該函數應返回一個字串,其簽名如下:
relativeTime: {
...,
yy: function (number, withoutSuffix, key, isFuture) {
return string;
}
}
number
參數代表該鍵對應的數值。 例如,對於 m
,該數值是分鐘數。
withoutSuffix
參數表示是否顯示後綴。 如果 token 在沒有後綴的情況下顯示,則該參數為 true
;如果 token 在帶有後綴的情況下顯示,則該參數為 false
。(採用反向邏輯的原因是,預設情況下會顯示後綴。)
key
參數指的是 Locale#relativeTime
物件中的鍵名,例如 s
、m
、mm
、h
等。
isFuture
參數表示是否使用未來的後綴/前綴。 如果使用未來的後綴/前綴,則該參數為 true
;如果使用過去的後綴/前綴,則該參數為 false
。
相對時間閾值和捨入
您可以在使用此外掛程式時傳遞一個配置物件,以自訂閾值和捨入配置。
var config = {
thresholds: [{}],
rounding: function
}
dayjs.extend(relativeTime, config)
thresholds
是一個 Object
類型的 Array
,用於定義何時將時間單位視為一分鐘、一小時等。 例如,預設情況下,超過 45 秒視為一分鐘,超過 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
是一個 Function
,用於在將數值傳遞給 locale 中指定的 relativeTime
格式字串之前,對該數值進行處理。 要變更這些值,可以傳遞一個新的 rounding
函數,如下所示。
// 預設值是 Math.round
var rounding = Math.floor;