2010-06-15 2 views
1

Можно создать дубликат:
How do I calculate relative time?Дисплея Дружественная дата, номер

Я ищу пользовательский элемент управление для ASP.NET, который помогает дружественные датам пользователя дисплей, как вместо даты статьи :

(2-апреля-2010)

отображает

(2 месяца)

Я не могу найти его на Google, пожалуйста, может предложить любой из ссылок, пользовательские элементы управления, статьи для того же.

спасибо.

+0

Вы используете ASP.NET MVC 2? – mkchandler

+0

@George: тот, что находится на C#, и этот запрашивает пользовательский элемент управления ASP.NET. Я не парень .NET, поэтому я не знаю, насколько значительна разница. –

+0

@Bill The Lizard Это не имеет никакого значения, нет такого контроля, и код, чтобы делать то, что он хотел, был дан в ответе Джеффа. –

ответ

3

Попробуйте это (это расширение datetime). Таким образом, использование:

var date = new DateTime.Now; 

string formattedDate = date.ToReadableTimespan(); 


public static string ToReadableTimespan(this DateTime d) 
      { 
       // 1. 
       // Get time span elapsed since the date. 
       TimeSpan s = DateTime.Now.Subtract(d); 

       // 2. 
       // Get total number of days elapsed. 
       int dayDiff = (int)s.TotalDays; 

       // 3. 
       // Get total number of seconds elapsed. 
       int secDiff = (int)s.TotalSeconds; 

       // 4. 
       // Don't allow out of range values. 
       if (dayDiff < 0 || dayDiff >= 31) 
       { 
        return null; 
       } 

       // 5. 
       // Handle same-day times. 
       if (dayDiff == 0) 
       { 
        // A. 
        // Less than one minute ago. 
        if (secDiff < 60) 
        { 
         return "just now"; 
        } 
        // B. 
        // Less than 2 minutes ago. 
        if (secDiff < 120) 
        { 
         return "1 minute ago"; 
        } 
        // C. 
        // Less than one hour ago. 
        if (secDiff < 3600) 
        { 
         return string.Format("{0} minutes ago", 
          Math.Floor((double)secDiff/60)); 
        } 
        // D. 
        // Less than 2 hours ago. 
        if (secDiff < 7200) 
        { 
         return "1 hour ago"; 
        } 
        // E. 
        // Less than one day ago. 
        if (secDiff < 86400) 
        { 
         return string.Format("{0} hours ago", 
          Math.Floor((double)secDiff/3600)); 
        } 
       } 
       // 6. 
       // Handle previous days. 
       if (dayDiff == 1) 
       { 
        return "yesterday"; 
       } 
       if (dayDiff < 7) 
       { 
        return string.Format("{0} days ago", 
         dayDiff); 
       } 
       if (dayDiff < 31) 
       { 
        return string.Format("{0} weeks ago", 
         Math.Ceiling((double)dayDiff/7)); 
       } 
       return null; 
      } 
0

Лучший подход (IMHO) при использовании MVC 2 - это взять код Ричарда и подключить его через DisplayTemplate (ознакомьтесь с этим блогом, чтобы начать работу с шаблонами отображения: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html).

... а потом вы просто вызовите DisplayTemplate из режима просмотра с помощью следующего синтаксиса:

<% =Html.DisplayFor(model => model.ArticleDate, "ArticleDateDisplayTemplateName") %>

я использую DisplayTemplates на некоторое время теперь, и они должны были спасатели этого типа потому что вы можете использовать их во всей своей заявке.

Смежные вопросы