Skip to content

Commit

Permalink
Refactor diffForHumansAt to its own class
Browse files Browse the repository at this point in the history
  • Loading branch information
NFarrington committed Dec 24, 2019
1 parent ba92625 commit 405b146
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 47 deletions.
34 changes: 34 additions & 0 deletions app/Macros/CarbonMacros.php
@@ -0,0 +1,34 @@
<?php

namespace App\Macros;

use Carbon\Carbon;

class CarbonMacros
{
public static function diffForHumansAt(Carbon $carbon)
{
$diffDays = $carbon->diffInDays(now()->endOfDay());
switch ($diffDays) {
case 0:
$date = 'Today';
break;
case 1:
$date = 'Yesterday';
break;
case 2:
case 3:
case 4:
case 5:
case 6:
$date = "{$diffDays} days ago";
break;
default:
$date = $carbon->format('Y-m-d');
}

$time = $carbon->format('H:i');

return $date.' at '.$time;
}
}
24 changes: 2 additions & 22 deletions app/Providers/AppServiceProvider.php
Expand Up @@ -2,6 +2,7 @@

namespace App\Providers;

use App\Macros\CarbonMacros;
use GuzzleHttp\Client as GuzzleClient;
use Illuminate\Support\Carbon;
use Illuminate\Support\ServiceProvider;
Expand Down Expand Up @@ -29,28 +30,7 @@ public function register()
public function boot()
{
Carbon::macro('diffForHumansAt', function () {
$diffDays = $this->diffInDays(self::now()->endOfDay());
switch ($diffDays) {
case 0:
$time = 'Today';
break;
case 1:
$time = 'Yesterday';
break;
case 2:
case 3:
case 4:
case 5:
case 6:
$time = "{$diffDays} days ago";
break;
default:
$time = $this->format('Y-m-d');
}

$time .= ' at '.$this->format('H:i');

return $time;
return CarbonMacros::diffForHumansAt($this);
});
}
}
25 changes: 0 additions & 25 deletions tests/Unit/CarbonTest.php

This file was deleted.

38 changes: 38 additions & 0 deletions tests/Unit/Macros/CarbonMacrosTest.php
@@ -0,0 +1,38 @@
<?php

namespace Tests\Unit\Macros;

use Illuminate\Support\Carbon;
use Tests\TestCase;

class CarbonMacrosTest extends TestCase
{
const YEAR = 2019, MONTH = 12, DAY = 23, HOUR = 15, MINUTE = 29, SECOND = 1;

public static $now;

public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::$now = Carbon::create(self::YEAR, self::MONTH, self::DAY, self::HOUR, self::MINUTE, self::SECOND);
Carbon::setTestNow(self::$now);
}

public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
Carbon::setTestNow();
}

/** @test */
function diff_time_for_humans_outputs_correctly()
{
$date7DaysAgo = self::YEAR.'-'.self::MONTH.'-'.(self::DAY - 7);
$time = self::HOUR.':'.self::MINUTE;

$this->assertEquals("Today at {$time}", self::$now->diffForHumansAt());
$this->assertEquals("Yesterday at {$time}", self::$now->copy()->subDays(1)->diffForHumansAt());
$this->assertEquals("2 days ago at {$time}", self::$now->copy()->subDays(2)->diffForHumansAt());
$this->assertEquals("{$date7DaysAgo} at {$time}", self::$now->copy()->subDays(7)->diffForHumansAt());
}
}

0 comments on commit 405b146

Please sign in to comment.