BanglaCalender::isBefore15thMorning()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 2
eloc 2
nc 2
nop 3
1
<?php
2
3
/*
4
 * This file is part of the EasyBanglaDate package.
5
 *
6
 * Copyright (c) 2015 Roni Saha
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
13
namespace EasyBanglaDate\Tools;
14
15
16
class BanglaCalender
17
{
18
19
    /**
20
     * @param $month
21
     * @param $day
22
     * @param $hour
23
     * @param $morning
24
     * @param $isLeapYear
25
     * @return array
26
     */
27
    public static function getBengaliDateAndMonth($month, $day, $hour, $morning, $isLeapYear)
28
    {
29
        if ($month == 3) {
30
            return self::convertDatesOfMarch($day, $hour, $morning, $isLeapYear);
31
        }
32
33
        return self::handleCommonConversionLogic($day, $hour, $morning, $month, MagicNumbers::getMagicArrayForMonth($month));
34
    }
35
36
    /**
37
     * @param $day
38
     * @param $hour
39
     * @param $morning
40
     * @param $enMonth
41
     * @param $offsetsArray
42
     * @return array
43
     */
44
    private static function handleCommonConversionLogic($day, $hour, $morning, $enMonth, $offsetsArray)
45
    {
46
        $bnMonth = self::guessBanglaMonth($enMonth);
47
48
        if (self::is1stHalfOfMonth($day, $offsetsArray)) {
49
            return array(self::getNextDayIfNot($day + $offsetsArray[1], $hour < $morning), $bnMonth);
50
        }
51
52
        if (self::isUpComingMorning($day, $hour, $morning, $offsetsArray)) {
53
            return array($day + $offsetsArray[3], $bnMonth);
54
        }
55
56
        return self::getDateForNextMonth($day, $hour, $morning, $bnMonth, $offsetsArray[2]);
57
    }
58
59
    /**
60
     * @param $day
61
     * @param $stillYesterday
62
     * @return mixed
63
     */
64
    private static function getNextDayIfNot($day, $stillYesterday)
65
    {
66
        return $stillYesterday ? $day : $day + 1;
67
    }
68
69
    /**
70
     * @param $day
71
     * @param $hour
72
     * @param $morning
73
     * @param $month
74
     * @param $offset
75
     * @return array
76
     */
77
    private static function getDateForNextMonth($day, $hour, $morning, $month, $offset)
78
    {
79
        return array(self::getNextDayIfNot($day - $offset, $hour < $morning), self::getNextMonth($month));
80
    }
81
82
    /**
83
     * @param $month
84
     * @return mixed
85
     */
86
    private static function getNextMonth($month)
87
    {
88
        return $month == 12 ? 1 : $month + 1;
89
    }
90
91
    /**
92
     * @param $day
93
     * @param $hour
94
     * @param $morning
95
     * @param $isLeapYear
96
     * @return array
97
     */
98
    private static function convertDatesOfMarch($day, $hour, $morning, $isLeapYear)
99
    {
100
        $offset = self::getOffsetValueDependingOnDateAndMorningForMarch($day, $hour, $morning);
101
102
        return $offset ? array(self::getNextDayIfNot($day + $offset, !$isLeapYear), 11)
103
            : self::getDateForNextMonth($day, $hour, $morning, 11, 15);
104
    }
105
106
    /**
107
     * @param $day
108
     * @param $hour
109
     * @param $morning
110
     * @return bool|int|mixed
111
     */
112
    private static function getOffsetValueDependingOnDateAndMorningForMarch($day, $hour, $morning)
113
    {
114
        if ($day >= 1 && $day <= 14) {
115
            return self::getNextDayIfNot(15, $hour < $morning);
116
        } elseif (self::isBefore15thMorning($day, $hour, $morning)) {
117
            return 15;
118
        }
119
120
        return false;
121
    }
122
123
124
    /**
125
     * @param $day
126
     * @param $hour
127
     * @param $morning
128
     * @return bool
129
     */
130
    private static function isBefore15thMorning($day, $hour, $morning)
131
    {
132
        return $day == 15 && $hour < $morning;
133
    }
134
135
    /**
136
     * @param $day
137
     * @param $hour
138
     * @param $morning
139
     * @param $offsetsArray
140
     * @return bool
141
     */
142
    private static function isUpComingMorning($day, $hour, $morning, $offsetsArray)
143
    {
144
        return $day == $offsetsArray[2] && $hour < $morning;
145
    }
146
147
    /**
148
     * @param $day
149
     * @param $offsetsArray
150
     * @return bool
151
     */
152
    private static function is1stHalfOfMonth($day, $offsetsArray)
153
    {
154
        return $day >= 1 && $day <= $offsetsArray[0];
155
    }
156
157
    /**
158
     * @param $month
159
     * @return mixed
160
     */
161
    private static function guessBanglaMonth($month)
162
    {
163
        return $month > 4 ? $month - 4 : $month + 8;
164
    }
165
}