Формат относительного времени в моментах
Если я использую
moment().startOf("minute").fromNow();
Я получу:
a few seconds ago
a minute ago
...
Можно ли отформатировать вывод, как показано ниже?
00:00 minutes ago
00:01 minutes ago
...
2 ответа
Вы можете настроить, как момент форматирует относительное время для вашей локали, используя updateLocale
,
Обратите внимание, что документы говорят:
Если локаль требует дополнительной обработки для токена, он может установить токен как функцию со следующей подписью. Функция должна вернуть строку.
function (number, withoutSuffix, key, isFuture) {
return string;
}
В вашем случае вы можете сделать что-то вроде этого:
var m1 = moment().subtract(5, 'm');
var m2 = moment().subtract(15, 's');
console.log(m1.fromNow());
console.log(m2.fromNow());
moment.updateLocale('en', {
relativeTime : {
future: "in %s",
past: "%s ago",
s: function (number, withoutSuffix, key, isFuture){
return '00:' + (number<10 ? '0':'') + number + ' minutes';
},
m: "01:00 minutes",
mm: function (number, withoutSuffix, key, isFuture){
return (number<10 ? '0':'') + number + ':00' + ' 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"
}
});
console.log(m1.fromNow());
console.log(m2.fromNow());
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
Я не уверен, что приведенный выше код охватывает все случаи, которые вам нужны, но я думаю, что это может быть хорошей отправной точкой.
Ты можешь использовать fromNow()
метод.
moment(<time>).fromNow()
moment([2007, 0, 29]).fromNow(); // 4 years ago
Если вы пройдете true
Вы можете получить значение без суффикса.
moment([2007, 0, 29]).fromNow(); // 4 years ago
moment([2007, 0, 29]).fromNow(true); // 4 years
Для получения дополнительной информации вы можете обратиться источник
Как я знаю, это невозможно, используя fromNow()
функция. Вы можете сделать следующий трюк:
moment()
.seconds(moment().diff(moment().startOf("minute"), 'seconds'))
.format('[00]:ss [minutes ago]');
Я использую это для отображения относительного времени. Может быть, как-то это кому-нибудь поможет.
const Moment = require('moment')
const _ = require('lodash')
const duration = Moment.duration(12460923,'milliseconds')
const durationAsDays = _.floor(duration.asDays())
const durationAsHours = _.floor(duration.subtract( durationAsDays, 'days' ).asHours())
const durationAsMinutes = _.floor(duration.subtract( durationAsHours, 'hours' ).asMinutes())
let relativeDuration = ''
if ( durationAsDays > 0 )
relativeDuration += durationAsDays + 'd '
if ( durationAsHours > 0 )
relativeDuration += durationAsHours + 'h '
if ( durationAsMinutes > 0 )
relativeDuration += durationAsMinutes + 'm'
console.log(relativeDuration, durationAsMinutes) // 3h 27m