相对时间
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;