Skip to content

Commit

Permalink
Merge pull request #7 from Innmind/simplify-periods
Browse files Browse the repository at this point in the history
Simplify periods
  • Loading branch information
Baptouuuu authored Nov 23, 2024
2 parents 0e55714 + 8c7f920 commit d1ce6f3
Show file tree
Hide file tree
Showing 27 changed files with 287 additions and 371 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
- `Innmind\TimeContinuum\PointInTime\Month::ofYear()`
- `Innmind\TimeContinuum\Calendar\Day`
- `Innmind\TimeContinuum\PointInTime\Day::ofWeek()`
- `Innmind\TimeContinuum\Period::year()` named constructor
- `Innmind\TimeContinuum\Period::month()` named constructor
- `Innmind\TimeContinuum\Period::day()` named constructor
- `Innmind\TimeContinuum\Period::hour()` named constructor
- `Innmind\TimeContinuum\Period::minute()` named constructor
- `Innmind\TimeContinuum\Period::second()` named constructor
- `Innmind\TimeContinuum\Period::millisecond()` named constructor

### Changed

Expand Down
9 changes: 3 additions & 6 deletions fixtures/Period.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@

namespace Fixtures\Innmind\TimeContinuum;

use Innmind\TimeContinuum\{
Period as Model,
Period\Year,
};
use Innmind\TimeContinuum\Period as Model;
use Innmind\BlackBox\Set;

final class Period
Expand All @@ -29,12 +26,12 @@ public static function any(): Set
}

/**
* @return Set<Year>
* @return Set<Model>
*/
public static function anyNumberOfYear(): Set
{
return Set\Decorate::immutable(
Year::of(...),
Model::year(...),
Set\Integers::between(0, 9999),
)->take(100);
}
Expand Down
13 changes: 5 additions & 8 deletions src/Move/EndOfDay.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,18 @@

use Innmind\TimeContinuum\{
PointInTime,
Period\Hour,
Period\Minute,
Period\Second,
Period\Millisecond,
Period,
};

final class EndOfDay
{
public function __invoke(PointInTime $point): PointInTime
{
return $point->goForward(
Hour::of(23 - $point->hour()->toInt())
->add(Minute::of(59 - $point->minute()->toInt()))
->add(Second::of(59 - $point->second()->toInt()))
->add(Millisecond::of(999 - $point->millisecond()->toInt())),
Period::hour(23 - $point->hour()->toInt())
->add(Period::minute(59 - $point->minute()->toInt()))
->add(Period::second(59 - $point->second()->toInt()))
->add(Period::millisecond(999 - $point->millisecond()->toInt())),
);
}
}
4 changes: 2 additions & 2 deletions src/Move/EndOfMonth.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

use Innmind\TimeContinuum\{
PointInTime,
Period\Day,
Period,
};

final class EndOfMonth
Expand All @@ -14,7 +14,7 @@ public function __invoke(PointInTime $point): PointInTime
{
/** @psalm-suppress InvalidArgument The negative values can only happen when working with 2 different points in time */
return (new EndOfDay)($point)->goForward(
Day::of($point->month()->numberOfDays() - $point->day()->ofMonth()),
Period::day($point->month()->numberOfDays() - $point->day()->ofMonth()),
);
}
}
4 changes: 2 additions & 2 deletions src/Move/EndOfYear.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

use Innmind\TimeContinuum\{
PointInTime,
Period\Month,
Period,
};

final class EndOfYear
{
public function __invoke(PointInTime $point): PointInTime
{
$point = (new StartOfMonth)($point)->goForward(
Month::of(12 - $point->month()->ofYear()->toInt()),
Period::month(12 - $point->month()->ofYear()->toInt()),
);

return (new EndOfMonth)($point);
Expand Down
21 changes: 8 additions & 13 deletions src/Move/Month.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@
use Innmind\TimeContinuum\{
PointInTime,
Period,
Period\Day,
Period\Hour,
Period\Minute,
Period\Second,
Period\Millisecond,
};

final class Month
Expand All @@ -29,20 +24,20 @@ public function __invoke(PointInTime $point): PointInTime
/** @var PointInTime $newPoint */
$newPoint = (new StartOfMonth)($point)->{$this->direction}($this->months);
$newPoint = $newPoint->goForward(
Hour::of($point->hour()->toInt())
->add(Minute::of($point->minute()->toInt()))
->add(Second::of($point->second()->toInt()))
->add(Millisecond::of($point->millisecond()->toInt())),
Period::hour($point->hour()->toInt())
->add(Period::minute($point->minute()->toInt()))
->add(Period::second($point->second()->toInt()))
->add(Period::millisecond($point->millisecond()->toInt())),
);

if ($newPoint->month()->numberOfDays() < $point->day()->ofMonth()) {
return $newPoint->goForward(
Day::of($newPoint->month()->numberOfDays() - 1),
Period::day($newPoint->month()->numberOfDays() - 1),
);
}

return $newPoint->goForward(
Day::of($point->day()->ofMonth() - 1),
Period::day($point->day()->ofMonth() - 1),
);
}

Expand All @@ -51,14 +46,14 @@ public function __invoke(PointInTime $point): PointInTime
*/
public static function forward(int $months): self
{
return new self('goForward', Period\Month::of($months));
return new self('goForward', Period::month($months));
}

/**
* @param int<1, max> $months
*/
public static function backward(int $months): self
{
return new self('goBack', Period\Month::of($months));
return new self('goBack', Period::month($months));
}
}
13 changes: 5 additions & 8 deletions src/Move/StartOfDay.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,18 @@

use Innmind\TimeContinuum\{
PointInTime,
Period\Hour,
Period\Minute,
Period\Second,
Period\Millisecond,
Period,
};

final class StartOfDay
{
public function __invoke(PointInTime $point): PointInTime
{
return $point->goBack(
Hour::of($point->hour()->toInt())
->add(Minute::of($point->minute()->toInt()))
->add(Second::of($point->second()->toInt()))
->add(Millisecond::of($point->millisecond()->toInt())),
Period::hour($point->hour()->toInt())
->add(Period::minute($point->minute()->toInt()))
->add(Period::second($point->second()->toInt()))
->add(Period::millisecond($point->millisecond()->toInt())),
);
}
}
4 changes: 2 additions & 2 deletions src/Move/StartOfMonth.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

use Innmind\TimeContinuum\{
PointInTime,
Period\Day,
Period,
};

final class StartOfMonth
{
public function __invoke(PointInTime $point): PointInTime
{
return (new StartOfDay)($point)->goBack(
Day::of($point->day()->ofMonth() - 1),
Period::day($point->day()->ofMonth() - 1),
);
}
}
4 changes: 2 additions & 2 deletions src/Move/StartOfYear.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

use Innmind\TimeContinuum\{
PointInTime,
Period\Month,
Period,
};

final class StartOfYear
{
public function __invoke(PointInTime $point): PointInTime
{
return (new StartOfMonth)($point)->goBack(
Month::of($point->month()->ofYear()->toInt() - 1),
Period::month($point->month()->ofYear()->toInt() - 1),
);
}
}
Loading

0 comments on commit d1ce6f3

Please sign in to comment.