MySQLInterval::fromDateString()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
crap 1
1
<?php
2
namespace Y0lk\MySQLInterval;
3
4
use DateInterval;
5
6
class MySQLInterval {
7
	/**
8
	 * Takes a DateInterval object and returns a MySQL temporal interval expression
9
	 * @param  DateInterval $dateInterval Interval object to convert
10
	 * @param  string       $unit         MySQL unit to output
11
	 * @return string                     Returns the MySQL interval as a string
12
	 */
13 22
	public static function fromDateInterval(DateInterval $dateInterval, string $unit):string
14
	{
15 22
		$isString = false;
16
17
		switch ($unit) {
18 22
			case "MICROSECOND": 
19 1
				$expression = $dateInterval->format("%f");
20 1
				break;
21
22 21
			case "SECOND":
23 1
				$expression = $dateInterval->format("%s");
24 1
				break;
25
26 20
			case "MINUTE":
27 1
				$expression = $dateInterval->format("%i");
28 1
				break;
29
30 19
			case "HOUR":
31 1
				$expression = $dateInterval->format("%h");
32 1
				break;
33
34 18
			case "DAY":
35 1
				$expression = $dateInterval->format("%d");
36 1
				break;
37
38 17
			case "WEEK":
39 1
				$expression = $dateInterval->format("%d") / 7;
40 1
				break;
41
42 16
			case "MONTH":
43 1
				$expression = $dateInterval->format("%m");
44 1
				break;
45
46 15
			case "QUARTER":
47 1
				$expression = $dateInterval->format("%m") / 3;
48 1
				break;
49
50 14
			case "YEAR":
51 1
				$expression = $dateInterval->format("%y");
52 1
				break;
53
54 13
			case "SECOND_MICROSECOND":
55 1
				$isString = true;
56 1
				$expression = $dateInterval->format("%s.%f");
57 1
				break;
58
59 12
			case "MINUTE_MICROSECOND":
60 1
				$isString = true;
61 1
				$expression = $dateInterval->format("%i:%s.%f");
62 1
				break;
63
64 11
			case "MINUTE_SECOND":
65 1
				$isString = true;
66 1
				$expression = $dateInterval->format("%i:%s");
67 1
				break;
68
69 10
			case "HOUR_MICROSECOND":
70 1
				$isString = true;
71 1
				$expression = $dateInterval->format("%h:%i:%s.%f");
72 1
				break;
73
74 9
			case "HOUR_SECOND":
75 1
				$isString = true;
76 1
				$expression = $dateInterval->format("%h:%i:%s");
77 1
				break;
78
79 8
			case "HOUR_MINUTE":
80 1
				$isString = true;
81 1
				$expression = $dateInterval->format("%h:%i");
82 1
				break;
83
84 7
			case "DAY_MICROSECOND":
85 1
				$isString = true;
86 1
				$expression = $dateInterval->format("%d %h:%i:%s.%f");
87 1
				break;
88
89 6
			case "DAY_SECOND":
90 1
				$isString = true;
91 1
				$expression = $dateInterval->format("%d %h:%i:%s");
92 1
				break;
93
94 5
			case "DAY_MINUTE":
95 1
				$isString = true;
96 1
				$expression = $dateInterval->format("%d %h:%i");
97 1
				break;
98
99 4
			case "DAY_HOUR":
100 2
				$isString = true;
101 2
				$expression = $dateInterval->format("%d %h");
102 2
				break;
103
104 2
			case "YEAR_MONTH":
105 1
				$isString = true;
106 1
				$expression = $dateInterval->format("%y-%m");
107 1
				break;
108
			
109
			default:
110 1
				throw new \InvalidArgumentException("Unit '".$unit."' is not a valid MySQL interval unit", 1);
111
		}
112
113 21
		return "INTERVAL ".($isString ? "'".$expression."'" : (int)$expression)." ".$unit;
114
	}
115
116 1
	public static function fromDateString(string $dateString, string $unit):string
117
	{
118 1
		return self::fromDateInterval(DateInterval::createFromDateString($dateString), $unit);
119
	}
120
}