2021-05-18 17:41:36 +02:00
|
|
|
using System;
|
|
|
|
|
using Microsoft.Extensions.Localization;
|
|
|
|
|
using WotBlitzStatisticsPro.Blazor.Model;
|
|
|
|
|
|
|
|
|
|
namespace WotBlitzStatisticsPro.Blazor.Helpers
|
|
|
|
|
{
|
|
|
|
|
public static class DateDifferenceHelper
|
|
|
|
|
{
|
2021-10-25 15:44:06 +03:00
|
|
|
public static DateTime ConvertToLocalTime(this DateTimeOffset dateToConvert)
|
|
|
|
|
{
|
|
|
|
|
var specifiedTimeConvert = DateTime.SpecifyKind(dateToConvert.DateTime, DateTimeKind.Utc);
|
|
|
|
|
return specifiedTimeConvert.ToLocalTime();
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-18 17:41:36 +02:00
|
|
|
public static string SinceTime(this int timeInLinuxTimeStamp, IStringLocalizer<App> localizer)
|
|
|
|
|
{
|
|
|
|
|
var currentDate = DateTime.Now;
|
|
|
|
|
var timeToCalculate = new DateTime(1970, 1, 1) + TimeSpan.FromSeconds(timeInLinuxTimeStamp);
|
|
|
|
|
|
|
|
|
|
var difference = ParseTheDifference(currentDate - timeToCalculate);
|
|
|
|
|
string ago = difference.interval switch
|
|
|
|
|
{
|
|
|
|
|
TimeInterval.Year => localizer.GetString("years ago"),
|
|
|
|
|
TimeInterval.Month => localizer.GetString("months ago"),
|
|
|
|
|
TimeInterval.Day => localizer.GetString("days ago"),
|
|
|
|
|
TimeInterval.Hour => localizer.GetString("hours ago"),
|
|
|
|
|
TimeInterval.Minute => localizer.GetString("minutes ago")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return $"{difference.value} {ago}";
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-18 23:23:39 +02:00
|
|
|
public static string SinceTime(this DateTimeOffset time, IStringLocalizer<App> localizer)
|
2021-10-25 15:44:06 +03:00
|
|
|
{
|
|
|
|
|
return time.DateTime.SinceTime(localizer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string SinceTime(this DateTime time, IStringLocalizer<App> localizer)
|
2021-05-18 23:23:39 +02:00
|
|
|
{
|
|
|
|
|
var currentDate = DateTime.Now;
|
|
|
|
|
|
|
|
|
|
var difference = ParseTheDifference(currentDate - time);
|
|
|
|
|
string ago = difference.interval switch
|
|
|
|
|
{
|
|
|
|
|
TimeInterval.Year => localizer.GetString("years ago"),
|
|
|
|
|
TimeInterval.Month => localizer.GetString("months ago"),
|
|
|
|
|
TimeInterval.Day => localizer.GetString("days ago"),
|
|
|
|
|
TimeInterval.Hour => localizer.GetString("hours ago"),
|
|
|
|
|
TimeInterval.Minute => localizer.GetString("minutes ago")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return $"{difference.value} {ago}";
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-25 15:44:06 +03:00
|
|
|
|
2021-05-18 17:41:36 +02:00
|
|
|
public static (int value, TimeInterval interval) ParseTheDifference(TimeSpan difference)
|
|
|
|
|
{
|
2021-05-18 23:23:39 +02:00
|
|
|
if (difference.TotalHours < 1)
|
|
|
|
|
{
|
|
|
|
|
return (Convert.ToInt32(difference.TotalMinutes), TimeInterval.Minute);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (difference.TotalDays < 1)
|
|
|
|
|
{
|
|
|
|
|
return (Convert.ToInt32(difference.TotalHours), TimeInterval.Hour);
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-18 17:41:36 +02:00
|
|
|
return difference.TotalDays switch
|
|
|
|
|
{
|
|
|
|
|
>= 365 => (CalculateYears(difference.TotalDays), TimeInterval.Year),
|
2021-05-18 23:23:39 +02:00
|
|
|
(>= 30) and (< 365) => (CalculateMonths(difference.TotalDays), TimeInterval.Month),
|
2021-05-18 17:41:36 +02:00
|
|
|
_ => (Convert.ToInt32(difference.TotalDays), TimeInterval.Day)
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static int CalculateYears(double days)
|
|
|
|
|
{
|
|
|
|
|
return Convert.ToInt32(days) / 365;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static int CalculateMonths(double days)
|
|
|
|
|
{
|
|
|
|
|
return Convert.ToInt32(days) / 30;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|