freeelephants / altera Goto Github PK
View Code? Open in Web Editor NEWLicense: Other
License: Other
Add to DataInterface::format(string $format) method, like native php Date::format().
This feature must be implemented as Formatter component, and Date class will be delegated format method to this component.
Надо поддерживать Високосные года. Даже для корректных расчётов в рамках григорианского и юлианского календарей этой фичи не хватает.
По умолчанию будет считаться, что все года одинаковые в соответствии с заданной конфигурацией.
Для инъекции логики смещения високосных годов можно использовать два подхода.
Покрывает требования юлианского календаря.
// 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
]
],
]
Этот формат расширяем для поддержки несколько циклов и модификации нескольких месяцев для високосных годов, либо добавления в високосном году месяца, а не дней, как например в древнегреческих календарях.
Optional feature in calendar configuration.
weekDuration: 10
Required Classes:
FreeElephants\AltEra\TimeUnit\WeekInterface
FreeElephants\AltEra\TimeUnit\Week
FreeElephants\AltEra\Builder\WeekAwareCalendarBuilderInterface
::setWeekDuration(int $numberOfDays)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.