<p>moment (). fromNow () "hace unos segundos"</p>

Creado en 6 dic. 2012  ·  19Comentarios  ·  Fuente: moment/moment

moment (). fromNow () está regresando "hace unos segundos".
¿Por qué no "ahora mismo"?

New Feature

Comentario más útil

Puede personalizarlo haciendo algo como moment.langData('en').relativeTime.s = "just now" , aunque se vería extraño con un sufijo.

Si lo desea, puede crear un método que envuelva fromNow .

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

Todos 19 comentarios

Puede personalizarlo haciendo algo como moment.langData('en').relativeTime.s = "just now" , aunque se vería extraño con un sufijo.

Si lo desea, puede crear un método que envuelva fromNow .

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

¡Gracias Tim!

Gracias por el codigo. Estoy bien con "hace unos segundos", pero a menudo también obtengo "unos segundos" después de completar una operación porque los relojes del servidor y del cliente no están sincronizados. Entonces, me pregunto si no tendría sentido mostrar "ahora mismo" en ambos casos.

Sí, el código anterior muestra "justo ahora" si es 1 segundo antes o después de la hora actual, por lo que si desea aumentar ese rango, puede cambiar el número de milisegundos.

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);
}

Gracias, lo entendí, pero me preguntaba si tendría sentido que "ahora mismo" sea el comportamiento predeterminado, dado que ver "en unos segundos" para un evento pasado parece un error para la mayoría de los usuarios.

+1 para que "ahora mismo" sea el comportamiento predeterminado.

Bueno, si sus relojes no están sincronizados, tiene un problema. No creo que el lugar adecuado para arreglarlo sea el método de humanización del momento. Es una biblioteca de tiempo, le dice que muestre un tiempo en el futuro y lo hace.

Si desea cambiar la cadena "hace unos segundos" por "justo ahora", pero dejar "en unos segundos" eso es una cosa diferente. También requerirá una corrección de todas las traducciones ;-)

moment.langData ('en'). relatedTime.s = "nunca"; fue la corrección de mi problema # 555

¡Gracias Tim!

Los relojes casi siempre estarán un poco desincronizados al analizar las marcas de tiempo generadas por el servidor en un navegador. ¿Es este un caso de uso poco común de moment.js?

Creo que agregar un valor épsilon de unos pocos segundos, de modo que los intervalos más pequeños que ese en cualquier dirección producirían "justo ahora" o algo similar tiene sentido, y si este valor se puede cambiar fácilmente, puede ajustarse a las expectativas de todos: el valor 0 significa el comportamiento actual , un valor mayor que cero es para luchar contra el desplazamiento del navegador / servidor o similar.

¿Qué piensas?

Un "valor épsilon" configurable parece una buena idea.

Creo que una solución más simple al problema de @ejain es cuadrar el momento antes de mostrarlo. Por lo general, debe saber si es posible que la operación se haya realizado en el futuro.

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

Si esto debe ser parte de Moment, mi sugerencia es simplemente convertirlo en un argumento booleano para fromNow() . O mejor aún, deje que fromNow tome un objeto de opción (compatible a la inversa), como fromNow({withSuffix: false, forcePast: true}) .

@icambron : gran solución, si puedes estar seguro de que no tendrás momentos futuros válidos.

@timrwood gracias por tus consejos

en realidad es moment.langData('en')._relativeTime.s = "just now" si desea reemplazar dicha cadena.

Estoy humanizando fechas (sin información de tiempo), por lo que cambiar _relativeTime.s al equivalente de "hoy" para todas las configuraciones regionales fue mi solución.

fromNow (verdadero) devuelve "hace 2 minutos", "hace 2 horas", "hace unos segundos".
¿Cómo puedes hacer algo como "2m" o "2h" o "2s" o "2d" ?.

@ puneet94 Puede actualizar sus cadenas de configuración regional con https://momentjs.com/docs/#/customization/relative -time /

FWIW, pude aplicar "justo ahora" usando 2.12.0 especificando una función para 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 ¿qué formato de fecha estás usando con esto y cómo lo aplicas?
Tengo una cadena de fecha time = 1560955417474,
y desea mostrarlo dentro de una etiqueta de texto
<Text>{time}</Text>

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

chitgoks picture chitgoks  ·  3Comentarios

benhathaway picture benhathaway  ·  3Comentarios

ninigix picture ninigix  ·  3Comentarios

danieljsinclair picture danieljsinclair  ·  3Comentarios

Shoroh picture Shoroh  ·  3Comentarios