-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.php
112 lines (98 loc) · 3.38 KB
/
utils.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
trait utils {
// parámetro del modelo FechaBD
public static function getFechaFormato(
$dateInput = "",
$formatInput = "amd",
$formatOutput = "dma",
$separathor = '/'
)
{
if ($dateInput == "") {
$dateInput = date("d" . $separathor . "m" . $separathor . "Y");
}
switch ($formatInput) {
default:
case 'dma':
$day = substr($dateInput, 0, 2);
$month = substr($dateInput, 3, 2);
$year = substr($dateInput, 6, 4);
break;
case 'amd':
$day = substr($dateInput, 8, 2);
$month = substr($dateInput, 5, 2);
$year = substr($dateInput, 0, 4);
break;
case 'mda':
$day = substr($dateInput, 3, 2);
$month = substr($dateInput, 0, 2);
$year = substr($dateInput, 6, 4);
break;
}
$day = $day . $separathor;
$dateOutput = preg_replace("/[dD]/", $day, $formatOutput);
$month = $month . $separathor;
$dateOutput = preg_replace("/[mM]/", $month, $dateOutput);
$year = $year . $separathor;
$dateOutput = preg_replace("/[aAyY]/", $year, $dateOutput);
return substr($dateOutput, 0, -1);
} // cierre de la función
/**
* Método getFechaFinal
*
* Devuelve un string con la fecha final calculada a partir de una fecha dada
* hasta la canidad de días hábiles (tomando en cuneta dias laborables de la
* semana y los días feriados dados si existen)
*
* @param string $fechainicio Fecha de inicio en formato Y-m-d
* @param integer $diasHabiles cantidad de dias habiles para calcular el final
* @param array $diasferiados Arreglo de días feriados en formato Y-m-d
* @param array $diasNoHabiles Arreglo de días no laborables o tomados como
* no hábiles, Representación numérica ISO-8601 del día de la semana 1 (para
* lunes) hasta 7 (para domingo).
* @return string $psFechafin Fecha de fin en formato Y-m-d
*/
static public function getFechaFinal(
$fechaInicio = "",
$diasHabiles = 0,
$diasFeriados = array(),
$diasNoHabiles = array(6,7)
)
{
// obtenemos la fecha de hoy, solo para usar como referencia al usuario
if (trim($fechaInicio) == "") {
$fechaInicio = date("Y/m/d");
}
// convirtiendo en timestamp las fechas
$fechaInicial = strtotime($fechaInicio);
$diasHabiles = intval($diasHabiles);
$fechaFinal = 0;
// 24 horas, por 60 minutos, por 60 segundos
$segundosDia = 24*60*60; // 86400
$segundos = 0;
if ($diasHabiles < 0) {
return $fechaInicio;
}
// Creamos un for desde 0 hasta los días enviados envía el día de que
// culminan las vacaciones un día hábil adicional para el reingreso
//for ($diaRecorrido = 0; $diaRecorrido < $diasHabiles; $diaRecorrido++) {
for ($diaRecorrido = 0; $diaRecorrido <= $diasHabiles; $diaRecorrido++) {
// Comparamos si estamos en sábado o domingo, si es así restamos un dia
if (in_array(date("N", $fechaInicial + $segundos), $diasNoHabiles)) {
$diaRecorrido--;
}
// Comparamos si estamos en dia feriado, para restar un dia
elseif (in_array(date('Y/m/d', $fechaInicial + $segundos), $diasFeriados)) {
$diaRecorrido--;
}
else {
// Si no es sábado o domingo, y el for termina y nos muestra la nueva fecha
$fechaFinal = date("Y/m/d", $fechaInicial + $segundos);
}
// Acumulamos la cantidad de segundos que tiene un día en cada vuelta del for
$segundos = $segundos + $segundosDia;
}
return $fechaFinal;
} // cierre de la función
}
?>