Passed
Branch scrutinizer (a663d7)
by Wanderson
01:44
created

DateCalc::getTime()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 3
nop 1
dl 0
loc 10
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Win\Calendar;
4
5
use DateInterval;
6
7
/**
8
 * Calculo de Datas
9
 */
10
class DateCalc {
11
12
	const SECONDS = 'seconds';
13
	const MINUTES = 'minutes';
14
	const HOURS = 'hours';
15
	const DAYS = 'days';
16
	const WEEKS = 'weeks';
17
	const MONTHS = 'months';
18
	const YEARS = 'years';
19
20
	/** @var string[] Unidades de tempo */
21
	static private $units = array(
22
		self::SECONDS => ['segundo', 'segundos', 1],
23
		self::MINUTES => ['minuto', 'minutos', 60],
24
		self::HOURS => ['hora', 'horas', 60 * 60],
25
		self::DAYS => ['dia', 'dias', 24 * 60 * 60],
26
		self::WEEKS => ['semana', 'semanas', 7 * 24 * 60 * 60],
27
		self::MONTHS => ['mês', 'mêses', 30 * 24 * 60 * 60],
28
		self::YEARS => ['ano', 'anos', 365 * 24 * 60 * 60]
29
	);
30
31
	/**
32
	 * @param DateTime $dateTime
33
	 * @param int $minutes
34
	 */
35
	public static function sumSeconds(DateTime $dateTime, $minutes = 1) {
36
		$dateTime->add(DateInterval::createFromDateString($minutes . ' seconds'));
37
	}
38
39
	/**
40
	 * @param DateTime $dateTime
41
	 * @param int $minutes
42
	 */
43
	public static function sumMinutes(DateTime $dateTime, $minutes = 1) {
44
		$dateTime->add(DateInterval::createFromDateString($minutes . ' minutes'));
45
	}
46
47
	/**
48
	 * @param DateTime $dateTime
49
	 * @param int $hours
50
	 */
51
	public static function sumHours(DateTime $dateTime, $hours = 1) {
52
		$dateTime->add(DateInterval::createFromDateString($hours . ' hours'));
53
	}
54
55
	/**
56
	 * @param DateTime $dateTime
57
	 * @param int $days
58
	 */
59
	public static function sumDays(DateTime $dateTime, $days = 1) {
60
		$dateTime->add(DateInterval::createFromDateString($days . ' days'));
61
	}
62
63
	/**
64
	 * @param DateTime $dateTime
65
	 * @param int $weeks
66
	 */
67
	public static function sumWeeks(DateTime $dateTime, $weeks = 1) {
68
		$dateTime->add(DateInterval::createFromDateString($weeks . ' weeks'));
69
	}
70
71
	/**
72
	 * @param DateTime $dateTime
73
	 * @param int $months
74
	 */
75
	public static function sumMonths(DateTime $dateTime, $months = 1) {
76
		$dateTime->add(DateInterval::createFromDateString($months . ' months'));
77
	}
78
79
	/**
80
	 * @param DateTime $dateTime
81
	 * @param int $years
82
	 */
83
	public static function sumYears(DateTime $dateTime, $years = 1) {
84
		$dateTime->add(DateInterval::createFromDateString($years . ' years'));
85
	}
86
87
	/**
88
	 * @param DateTime $dateTime
89
	 * @param int $minutes
90
	 */
91
	public static function subSeconds(DateTime $dateTime, $minutes = 1) {
92
		$dateTime->sub(DateInterval::createFromDateString($minutes . ' seconds'));
93
	}
94
95
	/**
96
	 * @param DateTime $dateTime
97
	 * @param int $minutes
98
	 */
99
	public static function subMinutes(DateTime $dateTime, $minutes = 1) {
100
		$dateTime->sub(DateInterval::createFromDateString($minutes . ' minutes'));
101
	}
102
103
	/**
104
	 * @param DateTime $dateTime
105
	 * @param int $hours
106
	 */
107
	public static function subHours(DateTime $dateTime, $hours = 1) {
108
		$dateTime->sub(DateInterval::createFromDateString($hours . ' hours'));
109
	}
110
111
	/**
112
	 * @param DateTime $dateTime
113
	 * @param int $days
114
	 */
115
	public static function subDays(DateTime $dateTime, $days = 1) {
116
		$dateTime->sub(DateInterval::createFromDateString($days . ' days'));
117
	}
118
119
	/**
120
	 * @param DateTime $dateTime
121
	 * @param int $weeks
122
	 */
123
	public static function subWeeks(DateTime $dateTime, $weeks = 1) {
124
		$dateTime->sub(DateInterval::createFromDateString($weeks . ' weeks'));
125
	}
126
127
	/**
128
	 * @param DateTime $dateTime
129
	 * @param int $months
130
	 */
131
	public static function subMonths(DateTime $dateTime, $months = 1) {
132
		$dateTime->sub(DateInterval::createFromDateString($months . ' months'));
133
	}
134
135
	/**
136
	 * @param DateTime $dateTime
137
	 * @param int $years
138
	 */
139
	public static function subYears(DateTime $dateTime, $years = 1) {
140
		$dateTime->sub(DateInterval::createFromDateString($years . ' years'));
141
	}
142
143
	/**
144
	 * Converte segundos em outra unidade
145
	 * @param int $seconds
146
	 * @param string $format [d,m,Y,H,i]
147
	 */
148
	public static function convertSeconds($seconds = 0, $format = 'i') {
149
		$dt1 = new DateTime("@0");
150
		$dt2 = new DateTime("@$seconds");
151
		return $dt1->diff($dt2)->format('%' . $format);
152
	}
153
154
	/**
155
	 * Retorna a data no formato humano
156
	 * @return string (ex: 4 horas atrás), (ex: daqui a 5 dias)
157
	 */
158
	public static function toTimeAgo(DateTime $date) {
159
		if ($date === false) {
0 ignored issues
show
introduced by
The condition $date === false is always false.
Loading history...
160
			return 'indisponível';
161
		}
162
		$time = time() - strtotime($date->format(DateTime::SQL_DATE_TIME));
163
164
		if ($time == 0) {
165
			return 'agora mesmo';
166
		}
167
		if ($time > 0) {
168
			return static::getTime($time) . ' atrás';
169
		}
170
		if ($time < 0) {
171
			return 'daqui a ' . static::getTime($time * (-1));
172
		}
173
	}
174
175
	/**
176
	 * Retorna a data em unidade de tempo Humana
177
	 * @param int $seconds
178
	 * @return string Ex: 15 horas
179
	 */
180
	protected static function getTime($seconds) {
181
		$units = array_reverse(DateCalc::$units);
182
		foreach ($units as $unitName => $unitInfo) {
183
			if ($seconds >= $unitInfo[2]) {
184
				$timeTotal = floor($seconds / $unitInfo[2]);
185
				$isPlural = ($timeTotal > 1);
186
				return $timeTotal . ' ' . self::$units[$unitName][$isPlural];
187
			}
188
		}
189
		return 0;
190
	}
191
192
}
193