Skip to content

Commit

Permalink
Added diff method
Browse files Browse the repository at this point in the history
  • Loading branch information
omidfarahani committed May 9, 2024
1 parent f475f4d commit 02b6941
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/Jalalian.php
Original file line number Diff line number Diff line change
Expand Up @@ -754,4 +754,35 @@ public function getWeekOfMonth(): int
{
return floor(($this->day + 5 - $this->getDayOfWeek()) / 7) + 1;
}

public function diff(Jalalian $ref): array
{
if ($this->equalsTo($ref)) {
return [0, 0, 0];
}

$biggerDate = $this->greaterThan($ref) ? $this : $ref;
$biggerYear = $biggerDate->getYear();
$biggerMonth = $biggerDate->getMonth();
$biggerDay = $biggerDate->getDay();
$smallerDate = $this->greaterThan($ref) ? $ref : $this;
$smallerYear = $smallerDate->getYear();
$smallerMonth = $smallerDate->getMonth();
$smallerDay = $smallerDate->getDay();

$yearDiff = $biggerYear - $smallerYear;
$monthDiff = $biggerMonth - $smallerMonth;
$dayDiff = $biggerDay - $smallerDay;
if ($dayDiff < 0) {
$dayDiff = $biggerDay +
$smallerDate->getEndDayOfMonth()->getDay() - $smallerDate->getDay();
$monthDiff--;
}
if ($monthDiff < 0) {
$monthDiff += 12;
$yearDiff--;
}

return [$yearDiff, $monthDiff, $dayDiff];
}
}
56 changes: 56 additions & 0 deletions tests/JalalianTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -370,4 +370,60 @@ public function testGetQuarter()
$jDate = new Jalalian(1402, 7, 23);
$this->assertEquals(3, $jDate->getQuarter());
}

public function testdiff()
{
$jDate = new Jalalian(1401, 6, 26);

//same day
$this->assertEquals($jDate->diff(new Jalalian(1401, 6, 26)), [0, 0, 0]);

//year before
$this->assertEquals($jDate->diff(new Jalalian(1401, 6, 25)), [0, 0, 1]);

//day after
$this->assertEquals($jDate->diff(new Jalalian(1401, 6, 27)), [0, 0, 1]);

//same montt, same year, before
$this->assertEquals($jDate->diff(new Jalalian(1401, 6, 24)), [0, 0, 2]);

//same month, same year, after
$this->assertEquals($jDate->diff(new Jalalian(1401, 6, 28)), [0, 0, 2]);

//same year, before, smaller day
$this->assertEquals($jDate->diff(new Jalalian(1401, 4, 12)), [0, 2, 14]);

//same year, before, greater day
$this->assertEquals($jDate->diff(new Jalalian(1401, 4, 27)), [0, 1, 30]);

//same year, after, smaller day
$this->assertEquals($jDate->diff(new Jalalian(1401, 9, 10)), [0, 2, 15]);

//same year, after, greater day
$this->assertEquals($jDate->diff(new Jalalian(1401, 10, 28)), [0, 4, 2]);

//previous year, smaller month, smaller day
$this->assertEquals($jDate->diff(new Jalalian(1389, 4, 12)), [12, 2, 14]);

//previous year, smaller month, greater day
$this->assertEquals($jDate->diff(new Jalalian(1395, 4, 29)), [6, 1, 28]);

//previous year, greater month, smaller day
$this->assertEquals($jDate->diff(new Jalalian(1395, 9, 10)), [5, 9, 16]);

//previous year, greater month, greater day
$this->assertEquals($jDate->diff(new Jalalian(1395, 9, 30)), [5, 8, 26]);

//greater year, smaller month, smaller day
$this->assertEquals($jDate->diff(new Jalalian(1402, 4, 12)), [0, 9, 17]);

//greater year, smaller month, greater day
$this->assertEquals($jDate->diff(new Jalalian(1403, 4, 29)), [1, 10, 3]);

//greater year, greater month, smaller day
$this->assertEquals($jDate->diff(new Jalalian(1405, 9, 10)), [4, 2, 15]);

//greater year, greater month, greater day
$this->assertEquals($jDate->diff(new Jalalian(1405, 9, 30)), [4, 3, 4]);
}
}

0 comments on commit 02b6941

Please sign in to comment.