<p>moment (). fromNow () "несколько секунд назад"</p>

Созданный на 6 дек. 2012  ·  19Комментарии  ·  Источник: moment/moment

moment (). fromNow () возвращается «несколько секунд назад».
Почему не «прямо сейчас»?

New Feature

Самый полезный комментарий

Вы можете настроить это, выполнив что-то вроде moment.langData('en').relativeTime.s = "just now" , хотя с суффиксом это выглядело бы странно.

Если хотите, вы можете создать метод, который обертывает fromNow .

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

Все 19 Комментарий

Вы можете настроить это, выполнив что-то вроде moment.langData('en').relativeTime.s = "just now" , хотя с суффиксом это выглядело бы странно.

Если хотите, вы можете создать метод, который обертывает fromNow .

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

Спасибо, Тим!

Спасибо за код. Меня устраивает «несколько секунд назад», но я часто также получаю «через несколько секунд» после завершения операции, потому что часы сервера и клиента не синхронизированы. Так что мне интересно, не имеет ли смысла показывать «только сейчас» в обоих случаях?

Да, приведенный выше код показывает «только сейчас», если это 1 секунда до или после текущего времени, поэтому, если вы хотите увеличить этот диапазон, вы можете просто изменить количество миллисекунд.

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 25000) { // 25 seconds before or after now
        return 'just now';
    }
    return this.fromNow(a);
}

Спасибо, я получил это, но мне было интересно, имеет ли смысл использовать «только сейчас» в качестве поведения по умолчанию, учитывая, что просмотр прошедшего события «через несколько секунд» для большинства пользователей выглядит ошибкой.

+1, чтобы «только сейчас» быть поведением по умолчанию!

Что ж, если ваши часы не синхронизируются, у вас проблема. Я не думаю, что подходящее место для исправления - это метод очеловечивания момента. Это библиотека времени, вы говорите ей, чтобы она отображала время в будущем, и она это делает.

Другое дело, если вы хотите заменить строку «несколько секунд назад» на «только сейчас», но оставить «через несколько секунд». Также потребуется исправить все переводы ;-)

moment.langData ('ru'). relativeTime.s = "никогда"; было исправлением моей проблемы # 555

Спасибо, Тим!

Часы почти всегда будут немного рассинхронизированы при анализе временных меток, созданных сервером, в браузере. Это редкий случай использования moment.js?

Я думаю, что добавление эпсилон-значения в несколько секунд, чтобы интервалы, меньшие, чем этот в любом направлении, давали бы «только сейчас» или что-то подобное, имеет смысл, и если это значение легко изменить, оно может соответствовать ожиданиям всех - значение 0 означает текущее поведение , значение больше нуля означает борьбу со смещением браузера / сервера или аналогичным.

Что вы думаете?

Настраиваемое «эпсилон-значение» звучит как хорошая идея.

Я думаю, что более простое решение проблемы @ejain - это

var now = moment();
var mom = momentFromServer < now ? now : momentFromServer;
mom.fromNow(); //=> a few seconds ago

Если это должно быть частью Moment, я предлагаю просто сделать его логическим аргументом для fromNow() . Или еще лучше, пусть fromNow возьмет (обратно совместимый) объект option, например fromNow({withSuffix: false, forcePast: true}) .

@icambron : отличное решение, если вы уверены, что у вас не будет

@timrwood спасибо за советы

на самом деле это moment.langData('en')._relativeTime.s = "just now" если вы хотите заменить указанную строку.

Я очеловечиваю даты (без информации о времени), поэтому моим решением было изменение _relativeTime.s на эквивалент «сегодня» для всех языков.

fromNow (true) возвращает «2 минуты назад», «2 часа назад», «несколько секунд назад».
Как можно сделать что-то вроде «2м», «2ч», «2сек» или «2д»?

@ puneet94 Вы можете обновить строки своего языкового стандарта с помощью https://momentjs.com/docs/#/customization/relative -time /

FWIW, я смог применить «только что», используя 2.12.0, указав функцию для past :

moment.updateLocale('en', {
    relativeTime : {
        past: function(input) {
          return input === 'just now'
            ? input
            : input + ' ago'
        },
        s  : 'just now',
        future: "in %s",
        ss : '%d 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"
    }
});

@richardszalay, какой формат даты вы используете с этим и как вы это применяете?
У меня есть строка даты time = 1560955417474,
и хотите отобразить его в текстовом теге
<Text>{time}</Text>

Была ли эта страница полезной?
0 / 5 - 0 рейтинги