feat: time interval extension method (aka pipe)

This commit is contained in:
Mikhail Shabanov committed 2021-05-18 17:41:36 +02:00
1 parent 93deccf7f8
commit edfc9aa139
6 files changed
+112 -2

No files matched your search

@@ -0,0 +1,32 @@
using System;
using FluentAssertions;
using NUnit.Framework;
using WotBlitzStatisticsPro.Blazor.Helpers;
using WotBlitzStatisticsPro.Blazor.Model;
namespace WotBlitzStatisticsPro.Blazor.Tests.Helpers
{
public class DatesHelperTests
{
[SetUp]
public void Init()
{
}
[Test]
public void ShouldCalculateYears()
{
var currentDate = new DateTime(2021, 5, 18);
for (int i = 0; i < 10; i++)
{
var initialTime = currentDate.AddYears(-(1 + i * 3)).AddMonths(-i).AddDays(-i);
var result = DateDifferenceHelper.ParseTheDifference(currentDate - initialTime);
result.interval.Should().Be(TimeInterval.Year);
result.value.Should().Be(1 + i * 3);
}
}
// ToDo: Write months, days, hours and minutes scenarios
}
}
@@ -0,0 +1,48 @@
using System;
using Microsoft.Extensions.Localization;
using WotBlitzStatisticsPro.Blazor.Model;
namespace WotBlitzStatisticsPro.Blazor.Helpers
{
public static class DateDifferenceHelper
{
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}";
}
public static (int value, TimeInterval interval) ParseTheDifference(TimeSpan difference)
{
// ToDo: Check hours and mins if Days is 0
return difference.TotalDays switch
{
>= 365 => (CalculateYears(difference.TotalDays), TimeInterval.Year),
(> 30) and (< 365) => (CalculateMonths(difference.TotalDays), TimeInterval.Month),
_ => (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;
}
}
}
@@ -0,0 +1,11 @@
namespace WotBlitzStatisticsPro.Blazor.Model
{
public enum TimeInterval
{
Minute,
Hour,
Day,
Month,
Year
}
}
@@ -1,4 +1,5 @@
@inject IStringLocalizer<App> Localize @using WotBlitzStatisticsPro.Blazor.Helpers
@inject IStringLocalizer<App> Localize
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-sm-4 col-4"> <div class="col-sm-4 col-4">
@@ -13,7 +14,7 @@
<span style="font-size: 11px"><img src="/clan/clan.sortby.role.scale-200.png" style="height: 20px" /> @Clan.MembersCount</span> <span style="font-size: 11px"><img src="/clan/clan.sortby.role.scale-200.png" style="height: 20px" /> @Clan.MembersCount</span>
</div> </div>
<div class="col-sm-9 col-9" title="@Localize["Created"]"> <div class="col-sm-9 col-9" title="@Localize["Created"]">
<span style="font-size: 11px"><img src="/icons/calendar.scale-200.png" style="height: 20px" /> @Clan.CreatedAt</span> <span style="font-size: 11px"><img src="/icons/calendar.scale-200.png" style="height: 20px" /> @Clan.CreatedAt.SinceTime(Localize)</span>
</div> </div>
</div> </div>
</div> </div>
@@ -120,6 +120,9 @@
<data name="Created" xml:space="preserve"> <data name="Created" xml:space="preserve">
<value>Erstellt</value> <value>Erstellt</value>
</data> </data>
<data name="days ago" xml:space="preserve">
<value>vor Tagen</value>
</data>
<data name="Home" xml:space="preserve"> <data name="Home" xml:space="preserve">
<value>Startseite</value> <value>Startseite</value>
</data> </data>
@@ -129,6 +132,9 @@
<data name="Members" xml:space="preserve"> <data name="Members" xml:space="preserve">
<value>Mitglieder</value> <value>Mitglieder</value>
</data> </data>
<data name="months ago" xml:space="preserve">
<value>vor Monaten</value>
</data>
<data name="Search" xml:space="preserve"> <data name="Search" xml:space="preserve">
<value>Suchen</value> <value>Suchen</value>
</data> </data>
@@ -141,4 +147,7 @@
<data name="Welcome to WOT Blitz statistics application!" xml:space="preserve"> <data name="Welcome to WOT Blitz statistics application!" xml:space="preserve">
<value>Willkommen bei der WOT Blitz statistics!</value> <value>Willkommen bei der WOT Blitz statistics!</value>
</data> </data>
<data name="years ago" xml:space="preserve">
<value>vor Jahren</value>
</data>
</root> </root>
@@ -120,6 +120,9 @@
<data name="Created" xml:space="preserve"> <data name="Created" xml:space="preserve">
<value>Создан</value> <value>Создан</value>
</data> </data>
<data name="days ago" xml:space="preserve">
<value>дней назад</value>
</data>
<data name="Home" xml:space="preserve"> <data name="Home" xml:space="preserve">
<value>На главную</value> <value>На главную</value>
</data> </data>
@@ -129,6 +132,9 @@
<data name="Members" xml:space="preserve"> <data name="Members" xml:space="preserve">
<value>Участников</value> <value>Участников</value>
</data> </data>
<data name="months ago" xml:space="preserve">
<value>месяцев назад</value>
</data>
<data name="Search" xml:space="preserve"> <data name="Search" xml:space="preserve">
<value>Поиск</value> <value>Поиск</value>
</data> </data>
@@ -141,4 +147,7 @@
<data name="Welcome to WOT Blitz statistics application!" xml:space="preserve"> <data name="Welcome to WOT Blitz statistics application!" xml:space="preserve">
<value>Добро пожаловать в WOT Blitz statistics!</value> <value>Добро пожаловать в WOT Blitz statistics!</value>
</data> </data>
<data name="years ago" xml:space="preserve">
<value>лет назад</value>
</data>
</root> </root>