57 lines
1.5 KiB
PHP
57 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Leenooks;
|
|
|
|
use Carbon\Carbon as CarbonBase;
|
|
|
|
/**
|
|
* This overrides the default Carbon\Carbon class so that we can enable
|
|
* additional Date functions, like Half Years
|
|
*/
|
|
|
|
class Carbon extends CarbonBase
|
|
{
|
|
const MONTHS_PER_HALF = 6;
|
|
|
|
public function __get($name)
|
|
{
|
|
switch (true) {
|
|
case $name === 'half':
|
|
return (int) ceil($this->month / static::MONTHS_PER_HALF);
|
|
|
|
default:
|
|
return parent::__get($name);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Modify to the first occurrence of a given day of the week
|
|
* in the current quarter. If no dayOfWeek is provided, modify to the
|
|
* first day of the current quarter. Use the supplied constants
|
|
* to indicate the desired dayOfWeek, ex. static::MONDAY.
|
|
*
|
|
* @param int|null $dayOfWeek
|
|
*
|
|
* @return static
|
|
*/
|
|
public function firstOfHalf($dayOfWeek = null)
|
|
{
|
|
return $this->setDate($this->year, $this->half * static::MONTHS_PER_HALF - 5, 1)->firstOfMonth($dayOfWeek);
|
|
}
|
|
|
|
/**
|
|
* Modify to the last occurrence of a given day of the week
|
|
* in the current quarter. If no dayOfWeek is provided, modify to the
|
|
* last day of the current quarter. Use the supplied constants
|
|
* to indicate the desired dayOfWeek, ex. static::MONDAY.
|
|
*
|
|
* @param int|null $dayOfWeek
|
|
*
|
|
* @return static
|
|
*/
|
|
public function lastOfHalf($dayOfWeek = null)
|
|
{
|
|
return $this->setDate($this->year, $this->half * static::MONTHS_PER_HALF, 1)->lastOfMonth($dayOfWeek);
|
|
}
|
|
}
|