Script para el cálculo de días hábiles

1 COMENTARIO -  Publicado hace 37 meses -  Clasificado en: , ,

Autor:Zyos

Ver ejemplo en funcionamiento » »
Archivos fuente del ejemplo » »

Este escript en php que sirve para calcular los días habiles. En mi caso se ocupa en una oficina, y lo nesecitan del año 2003 al 2008 pero se pueden mover los valores del 'for' en el script, lo mismo que los valores del array de inhabiles, donde se pueden agregar días que no quieren ser contados. El ejemplo funciona con un fichero index.php:

<html>
<head>
<title>DEMO</title>
<script src="js/mootools.js" type=text/javascript></script>
<script>
function ajax(){
new Ajax('script.php', {
update: $('resultado'),
postBody: $('form').toQueryString()
}).request();
}
</script>
</head>
<body>
<form id="form" onSubmit="javascript: ajax(); return false;">
<label>Día:</label>
<input type="text" size="2" name="day" value="<?php echo date("j"); ?>" />
<label>Mes:</label>
<input type="text" size="2" name="month" value="<?php echo date("n"); ?>" />
<label>Año:</label>
<input type="text" size="4" name="year" value="<?php echo date("Y"); ?>" />
<label>Días a Calcular:</label>
<input type="text" size="2" name="daysto" />
<input type="submit" id="btn" value="Calcular"/>
</form>
<br />
<div id="resultado" style="text-align:center;"></div>
</body>
</html>
Con includes a la librería mootools y un fichero script.php que se encarga de realizar el cálculo:
<?php
// Todo exepto la función get_days_for_month, sacada de esta web
// http://codedump.jonasjohn.de/snippets/get_days_for_month.htm
// modificada para que funcione con años bisiestos es de mi autoria
// imzyos@gmail.com
function get_days_for_month($m,$y){
if($m == 02){
if(($y % 4 == 0) && (($y % 100 != 0) || ($y % 400 == 0))){
return 29;
}else{
return 28;
}
}
if ($m == 4 || $m == 6 || $m == 9 || $m == 11){
return 30;
}else{
return 31;
}
}
extract($_POST);
if(!isset($day) or !isset($month) or !isset($year) or !isset($daysto)){ exit; }
$inhabiles = array('5/2/2007');
$habiles = array();
for($y=2003; $y<=2008; $y++){
for($m=1; $m<=12; $m++){
for($d=1; $d<=get_days_for_month($m,$y); $d++){
$date = date('D', mktime(0,0,0,$m,$d,$y));
if($date == 'Sat' or $date == 'Sun'){
$inhabiles[] = date("j/n/Y", mktime(0,0,0,$m,$d,$y));
}else{
if(!in_array(date("j/n/Y", mktime(0,0,0,$m,$d,$y)),$inhabiles)){
$habiles[] = date("j/n/Y", mktime(0,0,0,$m,$d,$y));
}
}
}
}
}
$date = $day.'/'.$month.'/'.$year;
$contador = array_search($date,$habiles);;
echo '<b>'.$habiles[$daysto+$contador].'</b>';
?>

Algunas entradas relacionadas:

También te puede interesar:

COMENTARIOS

Publicado hace 2 meses
K2H -  
Gracias. Una recomendación, trata de realizar tus funciones modulares o genéricas, en otras palabras, que no dependan de un cierto comportamiento o que se adapten a distintos comportamientos, las buenas funciones fundamentan bases y después se utilizan de la manera que se requiera, como la de "get_days_for_month", es buena y no depende directamente de terceros. Nuevamente, GRACIAS ;)
Haz un comentario

¡Gracias por dejar tu opinión! Por favor procura que tu comentarios sean apropiados respecto al tema tratado en la entrada; que no sean spam, u ofensivos, de otro modo, serán eliminados. Todos los comentarios serán moderados antes de su publicación por lo que su aparición en la web puede verse aplazada un cierto tiempo. Si deseas realizar algún comentario, crítica o sugerencia sobre la propia web puedes hacer a través de la siguiente dirección de correo: webintenta@webintenta.com