DateGenerator::getDatesByRange()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
nc 4
nop 2
dl 0
loc 26
ccs 15
cts 15
cp 1
crap 4
rs 9.504
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
/**
4
 * @maintainer Timur Shagiakhmetov <[email protected]>
5
 */
6
7
namespace Badoo\LiveProfilerUI;
8
9
class DateGenerator
10
{
11
    /**
12
     * Generate an array of dates
13
     * @param string $date last date
14
     * @param int $interval_in_days total interval in days
15
     * @param int $count required count of dates
16
     * @return array
17
     */
18 10
    public static function getDatesArray(string $date, int $interval_in_days, int $count = 7) : array
19
    {
20
        // return empty array for invalid input data
21 10
        if (!$interval_in_days || !$count) {
22 1
            return [];
23
        }
24
25
        // return no more than $interval_in_days dates
26 9
        if ($interval_in_days < $count) {
27 1
            $count = $interval_in_days;
28
        }
29
30 9
        $step_size = (int)($interval_in_days / $count);
31 9
        $dates = [];
32 9
        for ($i = $count - 1; $i >= 0; $i--) {
33 9
            $days = $i * $step_size;
34 9
            $dates[] = date('Y-m-d', strtotime($date . " -{$days} day"));
35
        }
36 9
        return $dates;
37
    }
38
39
    /**
40
     * @param string $date_from
41
     * @param string $date_to
42
     * @return array
43
     */
44 6
    public static function getDatesByRange(string $date_from, string $date_to) : array
45
    {
46 6
        if (strtotime($date_from) > strtotime($date_to)) {
47 1
            return [];
48
        }
49
50
        try {
51 5
            $period = new \DatePeriod(
52 5
                new \DateTime($date_from),
53 2
                new \DateInterval('P1D'),
54 2
                new \DateTime($date_to)
55
            );
56 3
        } catch (\Exception $e) {
57 3
            return [];
58
        }
59
60 2
        $dates = [];
61 2
        foreach ($period as $Date) {
62
            /** @var \DateTime $Date */
63 1
            $date = $Date->format('Y-m-d');
64 1
            $dates[$date] = $date;
65
        }
66 2
        $dates[$date_to] = $date_to;
67
        
68 2
        return array_values($dates);
69
    }
70
}
71