xref: /plugin/combo/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaunamespace Cron;
4*37748cd8SNickeau
5*37748cd8SNickeauuse DateTime;
6*37748cd8SNickeau
7*37748cd8SNickeau/**
8*37748cd8SNickeau * Month field.  Allows: * , / -
9*37748cd8SNickeau */
10*37748cd8SNickeauclass MonthField extends AbstractField
11*37748cd8SNickeau{
12*37748cd8SNickeau    public function isSatisfiedBy(DateTime $date, $value)
13*37748cd8SNickeau    {
14*37748cd8SNickeau        // Convert text month values to integers
15*37748cd8SNickeau        $value = str_ireplace(
16*37748cd8SNickeau            array(
17*37748cd8SNickeau                'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',
18*37748cd8SNickeau                'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'
19*37748cd8SNickeau            ),
20*37748cd8SNickeau            range(1, 12),
21*37748cd8SNickeau            $value
22*37748cd8SNickeau        );
23*37748cd8SNickeau
24*37748cd8SNickeau        return $this->isSatisfied($date->format('m'), $value);
25*37748cd8SNickeau    }
26*37748cd8SNickeau
27*37748cd8SNickeau    public function increment(DateTime $date, $invert = false)
28*37748cd8SNickeau    {
29*37748cd8SNickeau        if ($invert) {
30*37748cd8SNickeau            $date->modify('last day of previous month');
31*37748cd8SNickeau            $date->setTime(23, 59);
32*37748cd8SNickeau        } else {
33*37748cd8SNickeau            $date->modify('first day of next month');
34*37748cd8SNickeau            $date->setTime(0, 0);
35*37748cd8SNickeau        }
36*37748cd8SNickeau
37*37748cd8SNickeau        return $this;
38*37748cd8SNickeau    }
39*37748cd8SNickeau
40*37748cd8SNickeau    public function validate($value)
41*37748cd8SNickeau    {
42*37748cd8SNickeau        return (bool) preg_match('/^[\*,\/\-0-9A-Z]+$/', $value);
43*37748cd8SNickeau    }
44*37748cd8SNickeau}
45