Beispiel #1
0
        /// <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()));
        }