55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ModVersionChecker.utils
|
|
{
|
|
public class TimeUtils
|
|
{
|
|
public static long GetUnixTimeMillis(DateTime? dateTime)
|
|
{
|
|
DateTime dt = dateTime ?? DateTime.UtcNow;
|
|
return (long)(dt - new DateTime(1970, 1, 1)).TotalMilliseconds;
|
|
}
|
|
|
|
public static DateTime FromUnixTimeMillis(long unixTimeMillis)
|
|
{
|
|
return new DateTime(1970, 1, 1).AddMilliseconds(unixTimeMillis);
|
|
}
|
|
|
|
public static string ToFriendlyTime(long millisecods)
|
|
{
|
|
DateTime dateTime = FromUnixTimeMillis(millisecods);
|
|
return ToFriendlyTime(dateTime);
|
|
}
|
|
|
|
public static string ToFriendlyTime(DateTime dateTime)
|
|
{
|
|
// Use UTC for consistency with LiteDB if needed
|
|
DateTime now = DateTime.UtcNow;
|
|
|
|
|
|
TimeSpan span = now - dateTime;
|
|
|
|
// Handle future dates (optional)
|
|
if (span.TotalSeconds < 0)
|
|
return "In the future";
|
|
|
|
if (span.TotalSeconds < 60)
|
|
return $"{(int)span.TotalSeconds} seconds ago";
|
|
if (span.TotalMinutes < 60)
|
|
return $"{(int)span.TotalMinutes} minute{(span.TotalMinutes < 2 ? "" : "s")} ago";
|
|
if (span.TotalHours < 24)
|
|
return $"{(int)span.TotalHours} hour{(span.TotalHours < 2 ? "" : "s")} ago";
|
|
if (span.TotalDays < 30)
|
|
return $"{(int)span.TotalDays} day{(span.TotalDays < 2 ? "" : "s")} ago";
|
|
if (span.TotalDays < 365)
|
|
return $"{(int)(span.TotalDays / 30)} month{(span.TotalDays / 30 < 2 ? "" : "s")} ago";
|
|
|
|
return $"{(int)(span.TotalDays / 365)} year{(span.TotalDays / 365 < 2 ? "" : "s")} ago";
|
|
}
|
|
}
|
|
}
|