/// <summary> /// Will format a date with different strings depending on how close to referenceTime's date (today by default) the /// date is. /// Emulates: http://momentjs.com/docs/#/displaying/calendar-time/ /// </summary> /// <param name="moment"><see cref="Moment"/></param> /// <param name="dateTime">Uses DateTime.UtcNow if not provided</param> /// <returns>Localized string</returns> public static string Calendar(this Moment moment, DateTime dateTime = default(DateTime)) { var language = moment.Language; if (dateTime == default(DateTime)) { dateTime = DateTime.Now; } //compare with DateTimeParts.Day var timeSpan = (moment.DateTime() - dateTime.StartOf(DateTimeParts.Day)).TotalDays; if (timeSpan < -6) { return(language.Translate(Globalization.Calendar.SameElse, moment.LocalTime())); } if (timeSpan < -1) { return(language.Translate(Globalization.Calendar.LastWeek, moment.LocalTime())); } if (timeSpan < 0) { return(language.Translate(Globalization.Calendar.LastDay, moment.LocalTime())); } if (timeSpan < 1) { return(language.Translate(Globalization.Calendar.SameDay, moment.LocalTime())); } if (timeSpan < 2) { return(language.Translate(Globalization.Calendar.NextDay, moment.LocalTime())); } if (timeSpan < 7) { return(language.Translate(Globalization.Calendar.NextWeek, moment.LocalTime())); } return(language.Translate(Globalization.Calendar.SameElse, moment.LocalTime())); }