phphleb/calendar-stub

Solving the problem with calendar calculations in PHP

dev-main 2022-08-10 12:42 UTC

This package is auto-updated.

Last update: 2024-04-10 16:10:20 UTC


README

Генерация объекта даты начала или окончания периода, заданного по названию.

Решает проблему точных календарных дат в DateTime, при которой, например, значение (new DateTime('2017-01-31'))->modify('+1 month')->format('Y-m-d') равно "2017-03-03" а не "2017-02-28".

Установка

$ composer require phphleb/calendar-stub

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

use Phphleb\CalendarStub\DateNameToPeriodConverter;
$converter = new DateNameToPeriodConverter();

// Получение даты за календарный месяц назад от текущего времени.
// Возможные значения периода: 'day', 'week', 'month', 'quarter', 'year', 'all'
// Период может быть кратным, например '2 months'.
// Методы getStartDate и getEndDate возвращают объект DateTime.
$date = $converter
        ->setPeriodName('month')
        ->getStartDate()
        ->format('Y-m-d H:i:s');

// Получение даты два календарных месяца назад от текущего времени.
$date = $converter
        ->setPeriodName('2 months')
        ->getStartDate()
        ->format('Y-m-d H:i:s');
        
// Получение даты два календарных месяца вперед от текущего времени.
$date = $converter
        ->setPeriodName('2 months')
        ->setStartDate(new DateTime())
        ->getEndDate()
        ->format('Y-m-d H:i:s');

// Получение даты два календарных месяца назад от заданного времени (28го февраля 2017).
$endPeriod = new DateTime('2017-02-28 00:00::00');
$date = $converter
        ->setPeriodName('2 months')
        ->setEndDate($endPeriod)
        ->getStartDate()
        ->format('Y-m-d H:i:s');

// При задании периода "all" ничего не рассчитывается, так как возвращается или
// start date от начала UNIX Time, так и уже установленная end date или текущее время.
$date = $converter
        ->setPeriodName('all')
        ->getEndDate()
        ->format('Y-m-d H:i:s');