Skip to content

Commit a9729db

Browse files
authored
Merge pull request #165 from alissn/AddNewMethods
Add new methods
2 parents 0cd7624 + 1d48e38 commit a9729db

File tree

2 files changed

+214
-1
lines changed

2 files changed

+214
-1
lines changed

src/Jalalian.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,73 @@ public function getFirstDayOfYear(): Jalalian
165165
);
166166
}
167167

168+
public function getFirstDayOfQuarter(): Jalalian
169+
{
170+
return new static(
171+
$this->getYear(),
172+
($this->getQuarter() - 1) * Carbon::MONTHS_PER_QUARTER + 1,
173+
1,
174+
$this->getHour(),
175+
$this->getMinute(),
176+
$this->getSecond(),
177+
$this->getTimezone()
178+
);
179+
}
180+
181+
public function getEndDayOfWeek(): Jalalian
182+
{
183+
$endWeek = $this->addDays(6 - $this->getDayOfWeek());
184+
185+
return (new static(
186+
$endWeek->getYear(),
187+
$endWeek->getMonth(),
188+
$endWeek->getDay(),
189+
$endWeek->getHour(),
190+
$endWeek->getMinute(),
191+
$endWeek->getSecond(),
192+
$endWeek->getTimezone()
193+
));
194+
}
195+
196+
public function getEndDayOfMonth(): Jalalian
197+
{
198+
return new static(
199+
$this->getYear(),
200+
$this->getMonth(),
201+
$this->getDaysOf($this->getMonth()),
202+
$this->getHour(),
203+
$this->getMinute(),
204+
$this->getSecond(),
205+
$this->getTimezone()
206+
);
207+
}
208+
209+
public function getEndDayOfYear(): Jalalian
210+
{
211+
return new static(
212+
$this->getYear(),
213+
12,
214+
$this->getDaysOf(12),
215+
$this->getHour(),
216+
$this->getMinute(),
217+
$this->getSecond(),
218+
$this->getTimezone()
219+
);
220+
}
221+
222+
public function getEndDayOfQuarter(): Jalalian
223+
{
224+
return new static(
225+
$this->getYear(),
226+
$this->getQuarter() * Carbon::MONTHS_PER_QUARTER,
227+
$this->getDaysOf($this->getQuarter() * Carbon::MONTHS_PER_QUARTER),
228+
$this->getHour(),
229+
$this->getMinute(),
230+
$this->getSecond(),
231+
$this->getTimezone()
232+
);
233+
}
234+
168235
public function getMonthDays()
169236
{
170237
if ($this->getMonth() <= 6) {
@@ -199,6 +266,11 @@ public function getYear()
199266
return $this->year;
200267
}
201268

269+
public function getQuarter(): int
270+
{
271+
return (int) ceil($this->getMonth() / Carbon::MONTHS_PER_QUARTER);
272+
}
273+
202274
public function subMonths(int $months = 1): Jalalian
203275
{
204276
Assertion::greaterOrEqualThan($months, 1);

tests/JalalianTest.php

Lines changed: 142 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public function testGetWeekOfMonth()
160160
$jDate = new Jalalian(1401, 3, 7);
161161
$this->assertEquals($jDate->getWeekOfMonth(), 2);
162162
}
163-
163+
164164
public function testGetFirstDayOfWeek()
165165
{
166166
$jDate = new Jalalian(1401, 1, 23);
@@ -229,4 +229,145 @@ public function testGetLastMonth()
229229
$jDate = new Jalalian(1401, 6, 8);
230230
$this->assertEquals($jDate->getLastMonth()->format('Y-m-d'), '1401-05-08');
231231
}
232+
233+
public function testGetFirstDayOfQuarter()
234+
{
235+
$jDate = new Jalalian(1402, 1, 25);
236+
$this->assertEquals('1402-01-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
237+
238+
$jDate = new Jalalian(1402, 2, 25);
239+
$this->assertEquals('1402-01-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
240+
241+
$jDate = new Jalalian(1402, 3, 25);
242+
$this->assertEquals('1402-01-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
243+
244+
$jDate = new Jalalian(1402, 4, 25);
245+
$this->assertEquals('1402-04-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
246+
247+
$jDate = new Jalalian(1402, 5, 25);
248+
$this->assertEquals('1402-04-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
249+
250+
$jDate = new Jalalian(1402, 6, 25);
251+
$this->assertEquals('1402-04-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
252+
253+
$jDate = new Jalalian(1402, 7, 25);
254+
$this->assertEquals('1402-07-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
255+
256+
$jDate = new Jalalian(1402, 8, 25);
257+
$this->assertEquals('1402-07-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
258+
259+
$jDate = new Jalalian(1402, 9, 25);
260+
$this->assertEquals('1402-07-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
261+
262+
$jDate = new Jalalian(1402, 10, 25);
263+
$this->assertEquals('1402-10-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
264+
265+
$jDate = new Jalalian(1402, 11, 19);
266+
$this->assertEquals('1402-10-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
267+
268+
$jDate = new Jalalian(1402, 12, 25);
269+
$this->assertEquals('1402-10-01', $jDate->getFirstDayOfQuarter()->format('Y-m-d'));
270+
271+
}
272+
273+
public function testGetEndDayOfWeek()
274+
{
275+
/*
276+
* --------------------------------
277+
* Day 1402 (March 2024)
278+
* --------------------------------
279+
* Sat Sun Mon Tue Wed Thu Fri
280+
* --------------------------------
281+
* 1
282+
* 2 3 4 5 6 7 8
283+
* 9 10 11 12 13 14 15
284+
* 16 17 18 19 20 21 22
285+
* 23 24 25 26 27 28 29
286+
* 30
287+
* -------------------------------
288+
*/
289+
290+
$jDate = new Jalalian(1402, 10, 25);
291+
$this->assertEquals('1402-10-29', $jDate->getEndDayOfWeek()->format('Y-m-d'));
292+
293+
$jDate = new Jalalian(1402, 10, 29);
294+
$this->assertEquals('1402-10-29', $jDate->getEndDayOfWeek()->format('Y-m-d'));
295+
296+
$jDate = new Jalalian(1402, 10, 23);
297+
$this->assertEquals('1402-10-29', $jDate->getEndDayOfWeek()->format('Y-m-d'));
298+
299+
$jDate = new Jalalian(1402, 12, 29);
300+
$this->assertEquals('1403-01-03', $jDate->getEndDayOfWeek()->format('Y-m-d'));
301+
302+
}
303+
304+
public function testGetEndDayOfMonth()
305+
{
306+
/*
307+
* --------------------------------
308+
* Day 1402 (March 2024)
309+
* --------------------------------
310+
* Sat Sun Mon Tue Wed Thu Fri
311+
* --------------------------------
312+
* 1
313+
* 2 3 4 5 6 7 8
314+
* 9 10 11 12 13 14 15
315+
* 16 17 18 19 20 21 22
316+
* 23 24 25 26 27 28 29
317+
* 30
318+
* -------------------------------
319+
*/
320+
321+
$jDate = new Jalalian(1402, 10, 25);
322+
$this->assertEquals('1402-10-30', $jDate->getEndDayOfMonth()->format('Y-m-d'));
323+
324+
$jDate = new Jalalian(1402, 04, 12);
325+
$this->assertEquals('1402-04-31', $jDate->getEndDayOfMonth()->format('Y-m-d'));
326+
327+
$jDate = new Jalalian(1402, 12, 25);
328+
$this->assertEquals('1402-12-29', $jDate->getEndDayOfMonth()->format('Y-m-d'));
329+
}
330+
331+
public function testGetEndDayOfYear()
332+
{
333+
$jDate = new Jalalian(1402, 10, 25);
334+
$this->assertEquals('1402-12-29', $jDate->getEndDayOfYear()->format('Y-m-d'));
335+
336+
// LeapYear
337+
$jDate = new Jalalian(1403, 10, 25);
338+
$this->assertEquals('1403-12-30', $jDate->getEndDayOfYear()->format('Y-m-d'));
339+
}
340+
341+
public function testGetEndDayOfQuarter()
342+
{
343+
$jDate = new Jalalian(1402, 10, 25);
344+
$this->assertEquals('1402-12-29', $jDate->getEndDayOfQuarter()->format('Y-m-d'));
345+
346+
$jDate = new Jalalian(1402, 2, 25);
347+
$this->assertEquals('1402-03-31', $jDate->getEndDayOfQuarter()->format('Y-m-d'));
348+
349+
350+
$jDate = new Jalalian(1402, 6, 01);
351+
$this->assertEquals('1402-06-31', $jDate->getEndDayOfQuarter()->format('Y-m-d'));
352+
353+
354+
$jDate = new Jalalian(1402, 9, 01);
355+
$this->assertEquals('1402-09-30', $jDate->getEndDayOfQuarter()->format('Y-m-d'));
356+
}
357+
358+
public function testGetQuarter()
359+
{
360+
$jDate = new Jalalian(1402, 10, 25);
361+
$this->assertEquals(4, $jDate->getQuarter());
362+
363+
$jDate = new Jalalian(1402, 1, 01);
364+
$this->assertEquals(1, $jDate->getQuarter());
365+
366+
367+
$jDate = new Jalalian(1402, 05, 24);
368+
$this->assertEquals(2, $jDate->getQuarter());
369+
370+
$jDate = new Jalalian(1402, 7, 23);
371+
$this->assertEquals(3, $jDate->getQuarter());
372+
}
232373
}

0 commit comments

Comments
 (0)