Hi,
Does anyone have a simple function to hand for converting a date to a simple string (using .Net)?
E.g. 14-Oct-09 would read "Today", 13-Oct-09 would read "Yesterday" and 7-Oct-09 would read "1 Week Ago" etc...
Cheers, Tim
Hi,
Does anyone have a simple function to hand for converting a date to a simple string (using .Net)?
E.g. 14-Oct-09 would read "Today", 13-Oct-09 would read "Yesterday" and 7-Oct-09 would read "1 Week Ago" etc...
Cheers, Tim
You would indeed have to roll your own method of doing this, like JustLoren said.
This is an extension method I've been using. It is GateKiller script made into an extension method. So full credit to him. You could easily change it to however you want it.
public static string ToTimeSinceString(this DateTime value)
{
const int SECOND = 1;
const int MINUTE = 60 * SECOND;
const int HOUR = 60 * MINUTE;
const int DAY = 24 * HOUR;
const int MONTH = 30 * DAY;
TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - value.Ticks);
double seconds = ts.TotalSeconds;
// Less than one minute
if (seconds < 1 * MINUTE)
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
if (seconds < 60 * MINUTE)
return ts.Minutes + " minutes ago";
if (seconds < 120 * MINUTE)
return "an hour ago";
if (seconds < 24 * HOUR)
return ts.Hours + " hours ago";
if (seconds < 48 * HOUR)
return "yesterday";
if (seconds < 30 * DAY)
return ts.Days + " days ago";
if (seconds < 12 * MONTH) {
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "one month ago" : months + " months ago";
}
int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "one year ago" : years + " years ago";
}
Something like this extension method?
public static string Stringfy(this DateTime date)
{
if ((DateTime.Now - date.Date).TotalDays == 0)
return "Today";
if ((DateTime.Now - date.Date).TotalDays == 1)
return "Yesterday";
// ...
return "A long time ago, in a galaxy far far away...";
}