https://github.com/phphleb/calendar-stub
Solving the problem with calendar calculations in PHP
https://github.com/phphleb/calendar-stub
Last synced: 4 months ago
JSON representation
Solving the problem with calendar calculations in PHP
- Host: GitHub
- URL: https://github.com/phphleb/calendar-stub
- Owner: phphleb
- License: mit
- Created: 2022-08-10T07:29:48.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-12-06T00:32:54.000Z (over 1 year ago)
- Last Synced: 2024-12-25T23:10:07.002Z (over 1 year ago)
- Language: PHP
- Size: 7.81 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# php Calendar Stub
### Генерация объекта даты начала или окончания периода, заданного по названию.
Решает проблему точных календарных дат в DateTime, при которой, например,
значение `(new DateTime('2017-01-31'))->modify('+1 month')->format('Y-m-d')` равно "2017-03-03"
а не "2017-02-28".
#### Установка
```bash
$ composer require phphleb/calendar-stub
```
#### Использование
```php
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');
```