PHPackages                             shahruslan/production-calendar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. shahruslan/production-calendar

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

shahruslan/production-calendar
==============================

Производственный календарь

1.3.0(1y ago)4591↓16.7%1MITPHPPHP ^8.1

Since Apr 13Pushed 1y ago1 watchersCompare

[ Source](https://github.com/shahruslan/production-calendar)[ Packagist](https://packagist.org/packages/shahruslan/production-calendar)[ RSS](/packages/shahruslan-production-calendar/feed)WikiDiscussions 1.x Synced 1mo ago

READMEChangelog (4)Dependencies (9)Versions (6)Used By (0)

Production calendar
===================

[](#production-calendar)

Описание:
---------

[](#описание)

Библиотека production-calendar позволяет получать данные о производственном календаре из сервиса [production-calendar.ru](https://production-calendar.ru/).

Использование:
--------------

[](#использование)

Чтобы использовать библиотеку, необходимо установить её с помощью Composer:

```
composer require shahruslan/production-calendar
```

Далее надо будет подключить какой-нибудь PSR-18 совместимый [http-client](https://packagist.org/providers/psr/http-client-implementation). Этот клиент подключается автоматически, но при желании вы можете его сконфигурировать и передать в конструктор. И в заключении получаем [токен](https://production-calendar.ru/token) для работы с API. Чтобы его получить, достаточно указать свой email, на который придет письмо с токеном. Затем можно использовать класс `Calendar` для получения данных о производственном календаре:

```
use Shahruslan\ProductionCalendar\Calendar;

$calendar = new Calendar('your-token');

// Получение календаря на весь год
$calendarForYear = $calendar->getPeriodForYear(2024);

// Получение календаря на определённый месяц
$calendarForMonth = $calendar->getPeriodForMonth(2024, 1);

// Получение календаря на определённый день
$calendarForDay = $calendar->getPeriodForDay(new DateTime('2024-01-01'));
```

### Методы класса `Calendar`

[](#методы-класса-calendar)

- `getPeriodForYear(int $year): Period` - Получение календаря на весь год;
- `getPeriodForQuarter(int $year, int $quarter): Period` - Получение календаря на определённый квартал;
- `getPeriodForMonth(int $year, int $month): Period` - Получение календаря на определённый месяц;
- `getPeriodForDay(DateTimeInterface $date): Period` - Получение календаря на определённый день;
- `getPeriod(string $period): Period` - Получение календаря на произвольный период(не более года).

Каждый метод возвращает объект класса `Period`, содержащий данные о производственном календаре.

### Класс `Period`

[](#класс-period)

Класс `Period` представляет собой объект, содержащий данные о производственном календаре. В свойстве `days` массив объектов типа `Day` со свойствами:

- `date` - текущий день;
- `type` - тип дня(праздничный, рабочий, выходной и тд);
- `weekDay` - день недели;
- `workingHours` - количество рабочих часов.
- `isProject` - находится ли этот день в проекте закона и еще не утвержден.

Свойство `statistic` отображает ряд статистических данных для задаваемого периода:

- `calendarDays` – количество календарных дней в периоде;
- `calendarDaysWithoutHolidays` - количество календарных дней в периоде без учета праздничных дней (полезный показатель для расчета продолжительности отпуска работника);
- `workDays` – количество рабочих дней в периоде;
- `weekends` – количество выходных дней в периоде (без учета праздничных);
- `holidays` – количество праздничных дней в периоде;
- `shortenedWorkingDays` – количество сокращённых рабочих дней в периоде;
- `workingHours` – количество рабочего времени за период.

```
use Shahruslan\ProductionCalendar\Calendar;

$calendar = new Calendar('your-token');
$period = $calendar->getPeriod('07.01.2024-09.01.2024', region: 23);
print_r($period);
```

Output:

```
Shahruslan\ProductionCalendar\Entity\Period Object
(
    [country] => Shahruslan\ProductionCalendar\Entity\Dictionary\Country Object
        (
            [code] => ru
            [text] => Российская Федерация
        )
    [region] => Shahruslan\ProductionCalendar\Entity\Dictionary\Region Object
        (
            [number] => 23
            [text] => Краснодарский край
        )
    [dateStart] => DateTimeImmutable Object
        (
            [date] => 2024-01-07 00:00:00.000000
            [timezone_type] => 3
            [timezone] => UTC
        )
    [dateEnd] => DateTimeImmutable Object
        (
            [date] => 2024-01-09 00:00:00.000000
            [timezone_type] => 3
            [timezone] => UTC
        )
    [workWeekType] => 5-и дневная рабочая неделя
    [period] => Произвольный период
    [days] => Array
        (
            [0] => Shahruslan\ProductionCalendar\Entity\Day Object
                (
                    [date] => DateTimeImmutable Object
                        (
                            [date] => 2024-01-07 00:00:00.000000
                            [timezone_type] => 3
                            [timezone] => UTC
                        )
                    [type] => Shahruslan\ProductionCalendar\Entity\Dictionary\DayType Enum:string
                        (
                            [name] => publicHoliday
                            [value] => Государственный праздник
                        )
                    [weekDay] => Shahruslan\ProductionCalendar\Entity\Dictionary\WeekDay Enum:string
                        (
                            [name] => sunday
                            [value] => вс
                        )
                    [workingHours] => 0
                    [isProject] => 0
                )
            [1] => Shahruslan\ProductionCalendar\Entity\Day Object
                (
                    [date] => DateTimeImmutable Object
                        (
                            [date] => 2024-01-08 00:00:00.000000
                            [timezone_type] => 3
                            [timezone] => UTC
                        )
                    [type] => Shahruslan\ProductionCalendar\Entity\Dictionary\DayType Enum:string
                        (
                            [name] => publicHoliday
                            [value] => Государственный праздник
                        )
                    [weekDay] => Shahruslan\ProductionCalendar\Entity\Dictionary\WeekDay Enum:string
                        (
                            [name] => monday
                            [value] => пн
                        )
                    [workingHours] => 0
                    [isProject] => 0
                )
            [2] => Shahruslan\ProductionCalendar\Entity\Day Object
                (
                    [date] => DateTimeImmutable Object
                        (
                            [date] => 2024-01-09 00:00:00.000000
                            [timezone_type] => 3
                            [timezone] => UTC
                        )
                    [type] => Shahruslan\ProductionCalendar\Entity\Dictionary\DayType Enum:string
                        (
                            [name] => workingDay
                            [value] => Рабочий день
                        )
                    [weekDay] => Shahruslan\ProductionCalendar\Entity\Dictionary\WeekDay Enum:string
                        (
                            [name] => tuesday
                            [value] => вт
                        )
                    [workingHours] => 8
                    [isProject] => 0
                )
        )
    [statistic] => Shahruslan\ProductionCalendar\Entity\Statistic Object
        (
            [calendarDays] => 3
            [calendarDaysWithoutHolidays] => 1
            [workDays] => 1
            [weekends] => 0
            [holidays] => 2
            [shortenedWorkingDays] => 0
            [workingHours] => 8
        )
)

```

Дополнительные настройки
------------------------

[](#дополнительные-настройки)

При необходимости можно получить производственный календарь для конкретного региона. Например, в Краснодарском крае 14 мая 2024 года отмечается Радоница, и этот день объявлен выходным днем:

```
$calendar = new Shahruslan\ProductionCalendar\Calendar('token');
$data = $calendar->isWorkingDay(new DateTimeImmutable('14.05.2024'));
var_dump($data);
$data = $calendar->setRegion(23)->isWorkingDay(new DateTimeImmutable('14.05.2024'));
var_dump($data);
```

Output:

```
bool(true)
bool(false)
```

Помимо региона, еще можно настроить и другие параметры:

```
new Calendar(
	'token',
	isSixDayWeek: true, // включить учет по 6-ти дневной рабочей неделе
	isWeekendsOfSchrodinger: true, // учитывать ли так называемые нерабочие дни с сохранением заработной платы, которые начали практиковать с 2020 года (В период пандемии COVID-19)
	compact: true, // будут выводиться только особые дни, которые отличаются от обычного календаря
);
```

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance38

Infrequent updates — may be unmaintained

Popularity22

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~44 days

Recently: every ~10 days

Total

6

Last Release

535d ago

Major Versions

1.x-dev → 2.x-dev2024-11-24

### Community

Maintainers

![](https://www.gravatar.com/avatar/2bc8e2f7090c1f41558b27b26cb0f41cfc55560e166dd8920548dd7798dc7706?d=identicon)[shahruslan](/maintainers/shahruslan)

---

Top Contributors

[![shahruslan](https://avatars.githubusercontent.com/u/45426321?v=4)](https://github.com/shahruslan "shahruslan (18 commits)")[![bdumitrua](https://avatars.githubusercontent.com/u/91384628?v=4)](https://github.com/bdumitrua "bdumitrua (6 commits)")

###  Code Quality

Static AnalysisPsalm, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/shahruslan-production-calendar/health.svg)

```
[![Health](https://phpackages.com/badges/shahruslan-production-calendar/health.svg)](https://phpackages.com/packages/shahruslan-production-calendar)
```

###  Alternatives

[mailgun/mailgun-php

The Mailgun SDK provides methods for all API functions.

1.1k28.9M168](/packages/mailgun-mailgun-php)[friendsofsymfony/http-cache

Tools to manage HTTP caching proxies with PHP

36114.7M36](/packages/friendsofsymfony-http-cache)[opensearch-project/opensearch-php

PHP Client for OpenSearch

15024.3M65](/packages/opensearch-project-opensearch-php)[phpro/http-tools

HTTP tools for developing more consistent HTTP implementations.

28137.8k](/packages/phpro-http-tools)[getbrevo/brevo-php

Official Brevo provided RESTFul API V3 php library

963.1M35](/packages/getbrevo-brevo-php)[anthropic-ai/sdk

Anthropic PHP SDK

129134.7k5](/packages/anthropic-ai-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
