2011-03-14 13 views
13

Olası Çoğalt: asp.net MVC için raylar time_ago_in_words yardımcı benzeyen şey
How do I calculate relative time?asp.net mvc süre önce kelimeler yardımcısında

var mı?

+0

Bazı olmak zordur, benzer olarak görünüyor ASP.NET MVC'de bir HtmlHelper'a. Bu söylendiği gibi, bunun bir kopya olduğuna inanmıyorum. Evet, önerilen kopyadaki kod işe yarardı, ancak bu yalnızca sunucu tarafı yaklaşımıdır. İstenen çıktının sunucu tarafında oluşturulmasına gerek yoktur ve bu nedenle, kopyadan ayrılan cevap hala geçerli olacaktır. ** Bu soruyu kapatmayın **. üzerinde –

+1

dahil ayrıntıları nasıl [ 'time_ago_in_words'] (http://apidock.com/rails/ActionView/Helpers/DateHelper/time_ago_in_words) muhtemelen millet etkili bu cevap yardımcı doğru uzun bir yol gider çalışır. * Nasıl * kullanmak istediğiniz hakkında detayları * daha iyi olurdu * dahil *. – Shog9

+0

Bu gerçekten kapalı olması gerektiğini ... * yeniden açmak oy verin. * –

cevap

23

amaçlanan çıktı hedefe bağlı olarak, jQuery eklentisi Timeago daha iyi bir seçenek olabilir.

public static MvcHtmlString Timeago(this HtmlHelper helper, DateTime dateTime) { 
    var tag = new TagBuilder("abbr"); 
    tag.AddCssClass("timeago"); 
    tag.Attributes.Add("title", dateTime.ToString("s") + "Z"); 
    tag.SetInnerText(dateTime.ToString()); 

    return MvcHtmlString.Create(tag.ToString()); 
} 

sayfanızda bir yere aşağıdaki JavaScript yukarıdaki yardımcı çıkışını birleştirin ve para olacak:

İşte bir <abbr /> bir ISO 8601 zaman damgası içeren elemanını oluşturmak için bir HtmlHelper bu.

<script src="jquery.min.js" type="text/javascript"></script> 
<script src="jquery.timeago.js" type="text/javascript"></script> 

jQuery(document).ready(function() { 
    jQuery("abbr.timeago").timeago(); 
}); 
+0

Ben TIMEAGO düzgün göreli bir zaman hesaplayan bir dateTime.ToUniversal() tarihi geçmiş ama ipucu müşterinin yerine UTC saat diliminde zamanı gösteriyorsa bilgisayar saat dilimi. Neyi özlüyorum? – emzero

+0

Gerçekten bunu seviyorum, teşekkürler! Tarihin orijinal çıktısının 'SetInnerText' de olsa daha kolay olabileceğini düşünüyorum, bu yüzden onu güzelce değiştirecek şekilde değiştireceğim. – Luke

18

Şu anda aşağıdaki uzantı yöntemini kullanıyorum. Orada mevcut olan en iyisi olduğundan emin değilim.

public static string ToRelativeDate(this DateTime dateTime) 
{ 
    var timeSpan = DateTime.Now - dateTime; 

    if (timeSpan <= TimeSpan.FromSeconds(60)) 
     return string.Format("{0} seconds ago", timeSpan.Seconds); 

    if (timeSpan <= TimeSpan.FromMinutes(60)) 
     return timeSpan.Minutes > 1 ? String.Format("about {0} minutes ago", timeSpan.Minutes) : "about a minute ago"; 

    if (timeSpan <= TimeSpan.FromHours(24)) 
     return timeSpan.Hours > 1 ? String.Format("about {0} hours ago", timeSpan.Hours) : "about an hour ago"; 

    if (timeSpan <= TimeSpan.FromDays(30)) 
     return timeSpan.Days > 1 ? String.Format("about {0} days ago", timeSpan.Days) : "yesterday"; 

    if (timeSpan <= TimeSpan.FromDays(365)) 
     return timeSpan.Days > 30 ? String.Format("about {0} months ago", timeSpan.Days/30) : "about a month ago"; 

    return timeSpan.Days > 365 ? String.Format("about {0} years ago", timeSpan.Days/365) : "about a year ago"; 
} 

yardımcı böyle somthing olmalı:

public MvcHtmlString Timeago(this HtmlHelper helper, DateTime dateTime) 
{ 
    return MvcHtmlString.Create(dateTime.ToRelativeDate()); 
} 

yardımcı olur Umut! belgelerinde (http://bit.ly/h7zYCS) [bağlamda] üzerine ben şahsen raylar kullanmadıysanız veya yardımcı bahsettiğini, ancak esaslı çünkü

+3

Küçük nitröz, bu işlevle çoğullama hatalarınız var –