Passed
Branch tests1.5 (e599bd)
by Wanderson
01:46
created

DateCalc::sumMinutes()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 2
dl 0
loc 2
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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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 . ' ' . static::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
	 * @param DateTime|boolean $date
157
	 * @return string (ex: 4 horas atrás), (ex: daqui a 5 dias)
158
	 */
159
	public static function toTimeAgo($date) {
160
		$timeAgo = 'indisponível';
161
		if ($date !== false) {
162
			$time = time() - strtotime($date->format(DateTime::SQL_DATE_TIME));
163
164
			if ($time === 0) {
165
				$timeAgo = 'agora mesmo';
166
			} elseif ($time > 0) {
167
				$timeAgo = static::getTime($time) . ' atrás';
168
			} else {
169
				$timeAgo = 'daqui a ' . static::getTime($time * (-1));
170
			}
171
		}
172
		return $timeAgo;
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
		$time = 0;
183
		foreach ($units as $unitName => $unitInfo) {
184
			if ($seconds >= $unitInfo[2]) {
185
				$timeTotal = floor($seconds / $unitInfo[2]);
186
				$isPlural = ($timeTotal > 1);
187
				$time = $timeTotal . ' ' . self::$units[$unitName][$isPlural];
188
				break;
189
			}
190
		}
191
		return $time;
192
	}
193
194
}
195