I'd like the moment().fromNow()
functionality, but when the date is close it is too precise - ex. I don't want it to show 'in 3 hours' but 'today' - so basically with a 'daily' precision.
I tried using the moment().calendar()
function, it doesn't format if the date difference is more than 1 day
You can customize the way that both the
.fromNow
and the.calendar
methods display dates usingmoment.updateLocale
. The following code will change the way that.calendar
displays as per the question:Based on the question, it seems like the
.calendar
method would be more appropriate --.fromNow
wants to have a past/present prefix/suffix, but if you'd like to find out more you can read the documentation at http://momentjs.com/docs/#/customization/relative-time/.To use this in only one place instead of overwriting the locales, pass a string of your choice as the first argument when you define the
moment.updateLocale
and then invoke the calendar method using that locale (eg.moment.updateLocale('yesterday-today').calendar( /* moment() or whatever */ )
)EDIT: Moment ^2.12.0 now has the
updateLocale
method.updateLocale
andlocale
appear to be functionally the same, andlocale
isn't yet deprecated, but updated the answer to use the newer method.You can use this:
You can also do this to get the date for today and tomorrow and yesterday
From 2.10.5 moment supports specifying calendar output formats per invocation For a more detailed documentation check Moment - Calendar.
From 2.14.0 calendar can also take a callback to return values.
Requirements:
moment().fromNow()
functionality."today"
,"yesterday"
,"tomorrow"
, etc.Solution:
NB: From version 2.14.0, the formats argument to the calendar function can be a callback, see http://momentjs.com/docs/#/displaying/calendar-time/.
So this is what I ended up doing