Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Leap years supporting #8

Open
samizdam opened this issue Jan 9, 2016 · 0 comments
Open

Leap years supporting #8

samizdam opened this issue Jan 9, 2016 · 0 comments

Comments

@samizdam
Copy link
Member

samizdam commented Jan 9, 2016

Надо поддерживать Високосные года. Даже для корректных расчётов в рамках григорианского и юлианского календарей этой фичи не хватает.
По умолчанию будет считаться, что все года одинаковые в соответствии с заданной конфигурацией.
Для инъекции логики смещения високосных годов можно использовать два подхода.

Простой вариант

Покрывает требования юлианского календаря.

// other configuration
  'month' => [
    [
            'name' => 'Февраль',
            'numberOfDays' => [28, 28, 28, 29]
    ],

Таким образом можно будет явно указать каков цикл високосов. Если поддерживать возможность указать переменное кол-во дней для нескольких месяцев, то это позволит задавать разнообразные параллельные циклы, что может быть интересно для конструирования разных экзотических или ритуальных календарей с простой логикой.

Продвинутая логика

Подходит например для григорианского: https://en.wikipedia.org/wiki/Leap_year#Algorithm)

Может быть инжектирована в виде реализации примерно следующего интерфейса:

interface LeapYearDetectorInterface
{
     /**
      * @param int $yearNumber
      *
      * @return boolean
      */
     public function isLeapYear($yearNumber);
}

Инжектировать логику и конфигурацию можно следующим образом:

// other configuration
'features' => [
  'leapYears' => 
    [
       'leap' => [
            'detector' => \FreeElephants\AltEra\DateInstantiator\GregorianLeapYearDetector::class, 
            'months' => [ // modified or provider in this leap years
                [
                    'name' => 'Февраль',
                    'numberOfDays' => 29
                ],
            ],
       ],
       'anotherLeap' => [
           // second leap configuration
       ]
    ],
]

Этот формат расширяем для поддержки несколько циклов и модификации нескольких месяцев для високосных годов, либо добавления в високосном году месяца, а не дней, как например в древнегреческих календарях.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant