2015-06-08 8 views
9

Sto usando moment.js.Utilizzare "5 giorni fa (Mar)" se entro l'ultima settimana in moment.js

Il valore predefinito per i giorni passati relativi è "5 days ago". Ma quello che voglio è che se entro una settimana fa dovrebbe restituire "5 days ago (Tue)". Se è più di una settimana, voglio il regolare "5 days ago".

The docs say posso fornire una funzione di formato personalizzato una cosa del genere:

moment.locale('en', { 
    relativeTime : { 
     future: "in %s", 
     past: "%s ago", 
     s: "seconds", 
     m: "a minute", 
     mm: "%d minutes", 
     h: "an hour", 
     hh: "%d hours", 
     //d: "a day", // this is the default 
     d: function(num, noSuffix, key, future) { return "a day (" + FOO + ")"; }, 
     //dd: "%d days", // this is the default 
     dd: function(num, noSuffix, key, future) { return num + "days (" + FOO + ")"; }, 
     M: "a month", 
     MM: "%d months", 
     y: "a year", 
     yy: "%d years" 
    } 
}); 

I problemi sono:

  • Come faccio a calcolare il nome del giorno per la variabile FOO?
  • Restituisce ad es. 5 days (Mon) ago invece di 5 days ago (Mon)
  • Voglio che questo formato personalizzato solo se si tratta di < = 7 giorni (entro l'ultima settimana)
+0

la funzione giorno 'dd' restituisce' "num giorni (FOO)" 'quindi suppongo di ottenere il' fa' dopo perché lo si concatena dopo aver chiamato la funzione. Se lo vuoi diversamente, dovresti gestire il filamento restituito in un altro modo. – cnluzon

risposta

3

Non è possibile manipolare il formato di tempo relativo al modo in cui hai chiesto. Tuttavia, puoi semplicemente fare il confronto tu stesso per decidere se aggiungere o meno la stringa aggiuntiva.

// your source moment 
var m = moment("2015-06-04"); 

// calculate the number of whole days difference 
var d = moment().diff(m,'days'); 

// create the output string 
var s = m.fromNow() + (d >= 1 && d <= 7 ? m.format(" (ddd)") : ""); 
Problemi correlati