Человекочитаемые форматы дат

возможно, вы заметили, что некоторые веб-приложения (например, некоторые части GMail) отображают даты в более удобочитаемом формате, чем просто DD/MM/YYYY.

например, если я открою почтовый элемент из 23-го (который на момент написания статьи был 3 дня назад, я получу следующее:

23 декабря (3 дня назад)

Я хотел бы реализовать аналогичную логику в моем собственном веб-приложении.

например, при работе с объектом .NET TimeSpan я хотел бы преобразовать его в текст, например:

2 месяца

3 дня

есть .Net библиотека способны уже сейчас?

если нет, я мог бы построить что-то основное и с открытым исходным кодом.


Я сделал базовый старт здесь:

public static class TimeSpanHelpers
{
    public static string ToHumanReadableString(
        this TimeSpan timeSpan)
    {
        if (timeSpan.TotalDays > 30)
            return (timeSpan.TotalDays / 30) + " month(s)";

        if (timeSpan.TotalDays > 7)
            return (timeSpan.TotalDays / 7) + " week(s)";

        return (timeSpan.TotalDays) + " day(s)";
    }
}

4 ответов


на Нода Времени группа находится в процессе выполнения именно этого. Приходите и присоединяйтесь к веселью. Забыл упомянуть местоположение проекта Нода Времени проект


Попробуйте Humanizer http://humanizr.net/

TimeSpan.FromMilliseconds(1299630020).Humanize(3) => "2 weeks, 1 day, 1 hour"

// in de-DE culture
TimeSpan.FromDays(1).Humanize() => "Ein Tag"
TimeSpan.FromDays(2).Humanize() => "2 Tage"

// in sk-SK culture
TimeSpan.FromMilliseconds(1).Humanize() => "1 milisekunda"

// and a lot more
DateTime.UtcNow.AddHours(2).Humanize() => "2 hours from now"
"case".ToQuantity(5) => "5 cases"
"man".ToQuantity(2) => "2 men"
122.ToWords() => "one hundred and twenty-two"
(.5).Gigabytes().Humanize() => "512 MB"
"Long text to truncate".Truncate(10) => "Long text…",
"Sentence casing".Transform(To.TitleCase) => "Sentence Casing"

Nuget:

Install-Package Humanizer

другая библиотека для этого:http://relativetime.codeplex.com/

(доступно на NuGet)


Я закончил с помощью этот метод Как я хотел поддержать будущие даты, как 3 дня.