Skip to content

Commit

Permalink
Merge pull request #3 from bolorundurowb/feature/add-from-an-to-special
Browse files Browse the repository at this point in the history
feature/add from an to special
  • Loading branch information
Bolorunduro Winner-Timothy B committed Mar 13, 2019
2 parents fd5ccc0 + 67be785 commit c6963f2
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 127 deletions.
11 changes: 10 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,14 @@ install:
script:
- dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover tests/moment.net.Tests.csproj
after_success:
- REPO_COMMIT_AUTHOR=$(git show -s --pretty=format:"%cn")
- REPO_COMMIT_AUTHOR_EMAIL=$(git show -s --pretty=format:"%ce")
- REPO_COMMIT_MESSAGE=$(git show -s --pretty=format:"%s")
- echo $TRAVIS_COMMIT
- echo $TRAVIS_BRANCH
- echo $REPO_COMMIT_AUTHOR
- echo $REPO_COMMIT_AUTHOR_EMAIL
- echo $REPO_COMMIT_MESSAGE
- echo $TRAVIS_JOB_ID
- dotnet tool install coveralls.net --version 1.0.0 --tool-path tools
- ./tools/csmacnz.Coveralls --opencover -i ./tests/coverage.opencover.xml --useRelativePaths
- ./tools/csmacnz.Coveralls --opencover -i ./tests/coverage.opencover.xml --repoToken $COVERALLS_REPO_TOKEN --commitId $TRAVIS_COMMIT --commitBranch $TRAVIS_BRANCH --commitAuthor "$REPO_COMMIT_AUTHOR" --commitEmail "$REPO_COMMIT_AUTHOR_EMAIL" --commitMessage "$REPO_COMMIT_MESSAGE" --jobId $TRAVIS_JOB_ID --serviceName "travis-ci" --useRelativePaths
8 changes: 0 additions & 8 deletions src/Enums/RelativityDirection.cs

This file was deleted.

108 changes: 31 additions & 77 deletions src/RelativeTime.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using moment.net.Enums;

namespace moment.net
{
Expand All @@ -15,145 +14,100 @@ public static string FromNow(this DateTime This)
: ParseFromPastTimeSpan(DateTime.Now - This);
}

public static string From(this DateTime This, DateTime dateTime)
{
var startDate = This.Kind == DateTimeKind.Utc ? This : This.ToUniversalTime();
var endDate = dateTime.Kind == DateTimeKind.Utc ? dateTime : dateTime.ToUniversalTime();
return ParseFromPastTimeSpan(endDate - startDate);
}

public static string ToNow(this DateTime This)
{
return This.Kind == DateTimeKind.Utc
? ParseFromFutureTimeSpan(This - DateTime.UtcNow)
: ParseFromFutureTimeSpan(This - DateTime.Now);
}

private static string ParseFromPastTimeSpan(TimeSpan timeSpan)
public static string To(this DateTime This, DateTime dateTime)
{
var totalTimeInSeconds = timeSpan.TotalSeconds;

if (totalTimeInSeconds <= 44.0)
{
return "a few seconds ago";
}

if (totalTimeInSeconds > 44.0 && totalTimeInSeconds <= 89.0)
{
return "a minute ago";
}

var totalTimeInMinutes = timeSpan.TotalMinutes;

if (totalTimeInSeconds > 89 && totalTimeInMinutes <= 44)
{
return $"{Math.Floor(totalTimeInMinutes)} minutes ago";
}

if (totalTimeInMinutes > 44 && totalTimeInMinutes <= 89)
{
return "an hour ago";
}

var totalTimeInHours = timeSpan.TotalHours;

if (totalTimeInMinutes > 89 && totalTimeInHours <= 21)
{
return $"{Math.Floor(totalTimeInHours)} hours ago";
}

if (totalTimeInHours > 21 && totalTimeInHours <= 35)
{
return "a day ago";
}

var totalTimeInDays = timeSpan.TotalDays;

if (totalTimeInHours > 35 && totalTimeInDays <= 25)
{
return $"{Math.Floor(totalTimeInDays)} days ago";
}

if (totalTimeInDays > 25 && totalTimeInDays <= 45)
{
return "a month ago";
}

if (totalTimeInDays > 45 && totalTimeInDays <= 319)
{
return $"{Math.Ceiling(totalTimeInDays / DaysInAMonth)} months ago";
}

if (totalTimeInDays > 319 && totalTimeInDays <= 547)
{
return "a year ago";
}

if (totalTimeInDays > 547)
{
return $"{Math.Ceiling(totalTimeInDays / DaysInAYear)} years ago";
}
var startDate = This.Kind == DateTimeKind.Utc ? This : This.ToUniversalTime();
var endDate = dateTime.Kind == DateTimeKind.Utc ? dateTime : dateTime.ToUniversalTime();
return ParseFromFutureTimeSpan(endDate - startDate);
}

throw new ArgumentOutOfRangeException(nameof(timeSpan), timeSpan,
"The time span sent could not be parsed.");
private static string ParseFromPastTimeSpan(TimeSpan timeSpan)
{
return $"{ParseTimeDifference(timeSpan)} ago";
}

private static string ParseFromFutureTimeSpan(TimeSpan timeSpan)
{
return $"in {ParseTimeDifference(timeSpan)}";
}

private static string ParseTimeDifference(TimeSpan timeSpan)
{
var totalTimeInSeconds = timeSpan.TotalSeconds;

if (totalTimeInSeconds <= 44.0)
{
return "in a few seconds";
return "few seconds";
}

if (totalTimeInSeconds > 44.0 && totalTimeInSeconds <= 89.0)
{
return "in a minute";
return "one minute";
}

var totalTimeInMinutes = timeSpan.TotalMinutes;

if (totalTimeInSeconds > 89 && totalTimeInMinutes <= 44)
{
return $"in {Math.Ceiling(totalTimeInMinutes)} minutes";
return $"{Math.Round(totalTimeInMinutes)} minutes";
}

if (totalTimeInMinutes > 44 && totalTimeInMinutes <= 89)
{
return "in an hour";
return "one hour";
}

var totalTimeInHours = timeSpan.TotalHours;

if (totalTimeInMinutes > 89 && totalTimeInHours <= 21)
{
return $"in {Math.Ceiling(totalTimeInHours)} hours";
return $"{Math.Round(totalTimeInHours)} hours";
}

if (totalTimeInHours > 21 && totalTimeInHours <= 35)
{
return "in a day";
return "one day";
}

var totalTimeInDays = timeSpan.TotalDays;

if (totalTimeInHours > 35 && totalTimeInDays <= 25)
{
return $"in {Math.Ceiling(totalTimeInDays)} days";
return $"{Math.Round(totalTimeInDays)} days";
}

if (totalTimeInDays > 25 && totalTimeInDays <= 45)
{
return "in a month";
return "one month";
}

if (totalTimeInDays > 45 && totalTimeInDays <= 319)
{
return $"in {Math.Ceiling(totalTimeInDays / DaysInAMonth)} months";
return $"{Math.Round(totalTimeInDays / DaysInAMonth)} months";
}

if (totalTimeInDays > 319 && totalTimeInDays <= 547)
{
return "in a year";
return "one year";
}

if (totalTimeInDays > 547)
{
return $"in {Math.Ceiling(totalTimeInDays / DaysInAYear)} years";
return $"{Math.Round(totalTimeInDays / DaysInAYear)} years";
}

throw new ArgumentOutOfRangeException(nameof(timeSpan), timeSpan,
Expand Down

0 comments on commit c6963f2

Please sign in to comment.