webmasterskaya/production-calendar 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

webmasterskaya/production-calendar

Composer 安装命令:

composer require webmasterskaya/production-calendar

包简介

Production calendar of Russian Federation

README 文档

README

PHP библиотека, которая определяет рабочие, праздничные, выходные и нерабочие дни, в соответствии с производственным календарём Российской Федерации 2013-2025гг
Данные предоставлены сайтом http://www.consultant.ru/

  • ✔ Работает оффлайн
  • ✔ Автономный (базу можно актуализировать самостоятельно)
  • ✔ База весит меньше 5 КБ
  • ✔ Не тянет зависимости
  • ✔ Максимально документированный код

Начало использования

Добавьте пакет в зависимости проекта

composer require webmasterskaya\ProductionCalendar

Как работает

Класс Calendar реализует паттерн singletone. Любой вызов статичного метода приводит к инициализации экземпляра класса, если он ещё не был инициализирован. Все последующие вызовы будут работать с этим экземпляром.

Проверка дат осуществляется перемещением внутреннего указателя. При инициализации класса, указатель устанавливается на дату, переданную в аргументах метода. Если аргумент даты равен null, то указатель не смещается и используется последнее его положение.

Проверить текущее положение указателя можно, вызвав метод date():

use \Webmasterskaya\ProductionCalendar\Calendar;

Calendar::date(); // вернёт объект \DateTime, на который установлен внутренний указатель класса

Основные понятия

  • Рабочий день (isWorking() === true) - день, в который однозначно работают.
  • Выходной день (isWeekend() === true) - день, в который однозначно не работают (праздник, суббота и воскресение, кроме рабочих суббот).
  • Праздничный день (isHoliday() === true) - день, в который однозначно никто не работает, т.к. это праздник (Новый Год, День Победы).
  • Предпраздничный день (isPreHoliday() === true) - день, в который продолжительность работы сокращается на один час.
  • Нерабочий день (isNoWorking() === true) - в 2020 году появилось новое определение "Нерабочий день". Нерабочие дни введены в соответствии с Указами Президента РФ от 25.03.2020 N 206, от 02.04.2020 N 239, от 28.04.2020 N 294, от 29.05.2020 N 345, от 23.04.2021 N 242

Примеры использования

В примерах использования используются следующие аргументы:

  • $date (null|string|int|\DateTime) - дата, на которую будет установлен указатель.
    • При значении null проверка будет осуществляться от последней даты под курсором. Если под курсором нет даты, проверка начнётся от текущей даты.
    • При передаче даты, как string, необходимо использовать корректный формат даты. Пояснение даёт раздел «Форматы даты и времени».
  • $weekend (array) - Массив с номерами дней, которые считаются выходными (0 - воскресенье, 6 - суббота). По умолчанию: [6, 0].
  • $format (string) - Формат результирующей строки даты. Подробнее: https://www.php.net/manual/datetime.format.php. По умолчанию: Y-m-d

Варианты объявления $date:

$date = '06.05.2020'; // Строкой
$date = '2020-05-13'; // Строкой в другом формате
$date = 1582146000; // Unix Timestamp 
$date = new \DateTime('05.11.2020'); // Объект \DateTime

Проверка конкретной даты

Является ли день рабочим

Calendar::isWorking($date, [6, 0]); //bool
/* или */
Calendar::isWorking($date); //bool
/* или */
Calendar::isWorking(); //bool

Является ли день праздничным

Calendar::isHoliday($date); //bool
/* или */
Calendar::isHoliday(); //bool

Является ли день предпраздничным

Calendar::isPreHoliday($date); //bool
/* или */
Calendar::isPreHoliday(); //bool

Является ли день не рабочим

Calendar::isNoWorking($date); //bool
/* или */
Calendar::isNoWorking(); //bool

Поиск по дате

Найти ближайший рабочий день, за указанной датой.

Calendar::find($date)->working()->format($format); //string

Найти ближайший выходной день, за указанной датой.

Calendar::find($date)->holiday()->format($format); //string

Найти ближайший предпраздничный день, за указанной датой.

Calendar::find($date)->preHoliday()->format($format); //string

Найти ближайший нерабочий день, за указанной датой.

Calendar::find($date)->noWorking()->format($format); //string

Получить список дат

Получить список всех выходных дней за указанный промежуток дат

Calendar::getHolidaysListByInterval($date_from, $date_to, $format); //array

Получить список всех рабочих дней за указанный промежуток дат

Calendar::getWorkingListByInterval($date_from, $date_to, $format); //array

Получить список всех нерабочих дней за указанный промежуток дат

Calendar::getNoWorkingListByInterval($date_from, $date_to, $format); //array

Получить список всех предпраздничных дней за указанный промежуток дат

Calendar::getPreHolidayListByInterval($date_from, $date_to, $format); //array

Описание методов класса Updater

Обновить данные за указанный год

Updater::update($year); //void

Обновить все данные, начиная с 2013 года и до текущего

Updater::updateAll(); //void

Обновление справочника дат

composer calendar-update  # обновит данные за текущий год
composer calendar-update 2024 # обновит данные за указанный год
composer calendar-update all # обновит все данные за промежуток с 2013 по текущий год 

webmasterskaya/production-calendar 适用场景与选型建议

webmasterskaya/production-calendar 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5 次下载、GitHub Stars 达 1, 最近一次更新时间为 2020 年 05 月 20 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 webmasterskaya/production-calendar 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 webmasterskaya/production-calendar 我们能提供哪些服务?
定制开发 / 二次开发

基于 webmasterskaya/production-calendar 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 5
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 8
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 4
  • 开发语言: PHP

其他信息

  • 授权协议: (MIT or GPL-3.0-or-later) e004f8832733b1a0b7290b5761c6fb16199c2fee
  • 更新时间: 2020-05-20