Completed
Push — master ( 8a441b...ebc209 )
by Vladimir
04:28
created

Season::toInt()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 19
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 5.1502

Importance

Changes 0
Metric Value
dl 0
loc 19
ccs 9
cts 11
cp 0.8182
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 12
nc 5
nop 1
crap 5.1502
1
<?php
2
3
use Carbon\Carbon;
4
5
abstract class Season
6
{
7
    const WINTER = 'winter';
8
    const SPRING = 'spring';
9
    const SUMMER = 'summer';
10
    const FALL = 'fall';
11
12 31
    public static function toInt($season)
13
    {
14
        switch ($season) {
15 31
            case self::WINTER:
16 31
                return 1;
17
18
            case self::SPRING:
19
                return 2;
20 31
21
            case self::SUMMER:
22 31
                return 3;
23 29
24
            case self::FALL:
25
                return 4;
26 31
27
            default:
28 31
                return -1;
29
        }
30 31
    }
31 31
32
    public static function getSeason(DateTime $dateTime)
33
    {
34
        return [
35
            'season' => self::getCurrentSeason((int)$dateTime->format('n')),
36
            'year'   => (int)$dateTime->format('Y'),
37 30
        ];
38
    }
39 30
40
    public static function getCurrentSeason($month = null)
41
    {
42
        if ($month === null) {
43
            $month = Carbon::now()->month;
44 30
        }
45
46
        if (1 <= $month && $month <= 3) {
47 30
            return self::WINTER;
48
        } elseif (4 <= $month && $month <= 6) {
49
            return self::SPRING;
50 30
        } elseif (7 <= $month && $month <= 9) {
51 30
            return self::SUMMER;
52
        }
53
54
        return self::FALL;
55
    }
56
57
    public static function getCurrentSeasonRange($season = null)
58
    {
59
        if ($season === null) {
60
            $season = self::getCurrentSeason();
61
        }
62
63
        switch ($season) {
64
            case self::WINTER:
65
                return self::getWinterSeason();
66
67
            case self::SPRING:
68 30
                return self::getSpringSeason();
69
70 30
            case self::SUMMER:
71
                return self::getSummerSeason();
72
73
            default:
74
                return self::getFallSeason();
75
        }
76
    }
77
78
    public static function getWinterSeason()
79
    {
80
        return (new MonthDateRange('January', 'March'));
81
    }
82
83
    public static function getSpringSeason()
84
    {
85
        return (new MonthDateRange('April', 'June'));
86
    }
87
88
    public static function getSummerSeason()
89
    {
90
        return (new MonthDateRange('July', 'September'));
91
    }
92
93
    public static function getFallSeason()
94
    {
95
        return (new MonthDateRange('October', 'December'));
96
    }
97
}
98