Hola comunidad.
Creo que no me dejaba entender bien.
Pero ya tengo el script terminado.. al menos con todas las pruebas hechas hasta ahora me está funcionando.
Código PHP:
Ver originalfunction convertHourToSeconds($sHour){
$sHour = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $sHour); sscanf($sHour, "%d:%d:%d", $hours, $minutes, $seconds); $time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
//echo "<br/>".$sHour."->".$time_seconds;
return $time_seconds;
}
function fnValidarDiaSemana($sFechaAct="",$sDiaHoraIni="",$sDiaHoraFin=""){
$sHoraAct=date("h:i:s",$nSecondAct); $nDiaSemAct=date("N",$nSecondAct); //echo $nSecondAct."->".$sHoraAct." - ".$nDiaSemAct;
$sINIEJE=$sDiaHoraIni;
$sFINEJE=$sDiaHoraFin;
$nDiaSemIni=$aINIEJE[0];
$sHoraIni=$aINIEJE[1];
$nDiaSemFin=$aFINEJE[0];
$sHoraFin=$aFINEJE[1];
$nPermAcc=0 ;
if($nDiaSemAct >= $nDiaSemIni and $nDiaSemAct <= $nDiaSemFin )
$nPermAcc=1;
else if($nDiaSemIni > $nDiaSemFin and ( $nDiaSemFin >= $nDiaSemAct or $nDiaSemFin == $nDiaSemAct or $nDiaSemAct = $nDiaSemIni ))
$nPermAcc=1;
else
$nPermAcc=0;
$sFechaFin='';
$nSecondFin=0;
$sEstadoFecha='V';
//1 10:06:00-5 05:00:00
if($nDiaSemIni <= $nDiaSemFin){
$nSHACT=convertHourToSeconds($sHoraAct);
$nSHINI=convertHourToSeconds($sHoraIni);
$nSHFIN=convertHourToSeconds($sHoraFin);
$nDif=$nDiaSemFin - $nDiaSemAct;//5-1
if($nDiaSemAct == $nDiaSemIni and $nSHINI >= $nSHACT){
$sEstadoFecha='X';
if($nSHINI==$nSHACT) $sEstadoFecha='V';
$nDif=0;
$sHoraFin=$sHoraIni;
}
$nSecondFin = $nSecondAct + ($nDif * 24 * 60 * 60);
}else{
//3 10:06:00-5 05:00:00
$nSHACT=convertHourToSeconds($sHoraAct);
$nSHINI=convertHourToSeconds($sHoraIni);
$nSHFIN=convertHourToSeconds($sHoraFin);
$nDif=$nDiaSemFin - $nDiaSemAct;
$nDif($nDif<0?7-$nDif:$nDif);
if($nDiaSemAct == $nDiaSemIni and $nSHINI >= $nSHACT){
$sParamFinal='X';
if($nSHINI==$nSHACT) $sEstadoFecha='V';
$nDif=0;
$sHoraFin=$sHoraIni;
}
$nSecondFin = $nSecondAct + ($nDif * 24 * 60 * 60);
}
$sFechaFin=date("Y-m-d",$nSecondFin)." ".$sHoraFin;
if(($nSecondAct <= $nSecondFin and $nPermAcc == 1) and $sEstadoFecha <>'X')
return 1
else
return 0
}
echo fnValidarDiaSemana('2017-04-10 10:05:00','3 10:06:00','5 15:00:00');#0 (invalido)
echo "<br>";
echo fnValidarDiaSemana('2017-04-10 10:05:00','1 10:03:00','5 15:00:00');#1 (valido)
Como dije en un inicio. El único parámetro considerado fecha es el primer parámetro de la función, el 2do y 3er parámetro son en número de día de la semana y la hora.
Quizás haya otra manera más resumida de hacerlo, pero lo hice de esta manera ya que más adelante lo usaré para un script en bash.
Saludos.