Calendario PHP con días festivos

Otro calendario que nos ha mandado un lector que tiene como novedad que da color a todos los días festivos.
Deseo realizar mi propia aportación al calendario PHP, por ello os mando un script de un calendario que he desarrollado basandome en codigo que encontre por la red y que es totalmente configurable en el aspecto.

Como novedad sólo deciros que marca los dias festivos (en este caso los de Madrid) pero que son facilmente adaptables a la comunidad o pais que se quiera.

<?
function CalendarioPHP($year, $month, $day_heading_length = 3){
// Parametros de aspecto del calendario
$nombreFichero = basename($_SERVER['PHP_SELF']);
$ColorFondoCelda = '#CCCCCC';
$ColorFondoTabla = '#666666';
$ColorFondoCeldasDiaSemana = '#fff4bf';
$ColorFondoCeldasFestivo = '#ee0000';
$ColorFondoCeldaDiaActual = '#00ff00';
$ColorDiaLaboral = '#444444';
$ColorDiaFestivo = '#ffffff';
$ColorDiaActual = '#0000ff';
$TamanioFuente = '1';
$TipoFuente = 'Arial, Helvetica, sans-serif';
$AnchoCalendario = '1%';
$AltoCalendario = '1%';
$AnchoCeldas = '1%';
$AltoCeldas = '1%';
$AlineacionHorizontalTexto = 'center';
$AlineacionVerticalTexto = 'center';

// ----------- INICIO Dias Festivos ----------
$DiasFestivos[0] = '1/1'; // 1 de enero
$DiasFestivos[1] = '6/1'; // 6 de enero
$DiasFestivos[2] = '19/3'; // 19 de marzo
$DiasFestivos[3] = '1/5'; // 1 de mayo
$DiasFestivos[4] = '15/8'; // 15 de agosto
$DiasFestivos[5] = '12/10'; // 12 de octubre
$DiasFestivos[6] = '1/11'; // 1 de noviembre
$DiasFestivos[7] = '6/12'; // 6 de diciembre
$DiasFestivos[8] = '25/12'; // 25 de diciembre
// festivos Regionales
$DiasFestivos[9] = '2/5'; // 2 de mayo
$DiasFestivos[10] = '15/5'; // 15 de mayo
$DiasFestivos[11] = '9/9'; // 9 de noviembre
// Semana Santa
$DiasFestivos[12] = '17/4'; // Jueves Santo
$DiasFestivos[13] = '18/4'; // Viernes Santo
// ----------- FIN Dias Festivos ----------

//Calculo la fecha actual
$dia_actual=date("j",time());
$mes_actual=date("n",time());
$anio_actual=date("Y",time());

$first_of_month = mktime (0,0,0, $month, 1, $year);
#remember that mktime will automatically correct if invalid dates are entered
# for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
# this provides a built in "rounding" feature to generate_calendar()

static $day_headings = array('Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo');
$maxdays = date('t', $first_of_month); #number of days in the month
$date_info = getdate($first_of_month); #get info about the first day of the month
$month = $date_info['mon'];
$year = $date_info['year'];

//Traduzco los meses de ingles a Español
switch ($date_info['mon']) {
case "January" : $date_info[$month]="Enero";break;
case "February" : $date_info[$month]="Febrero";break;
case "March" : $date_info[$month]="Marzo";break;
case "April" : $date_info[$month]="Abril";break;
case "May" : $date_info[$month]="Mayo";break;
case "June" : $date_info[$month]="Junio";break;
case "July" : $date_info[$month]="Julio";break;
case "August" : $date_info[$month]="Agosto";break;
case "September": $date_info[$month]="Septiembre";break;
case "October" : $date_info[$month]="Octubre";break;
case "November" : $date_info[$month]="Noviembre";break;
case "December" : $date_info[$month]="Diciembre";break;
};

//Comienzo la tabla que contiene el calendario
$calendar = ("<table ").
("border='0' ").
("height='".$AltoCalendario."' ").
("width='".$AnchoCalendario."' ").
("cellspacing='1' cellpadding='2' ").
("bgcolor='".$ColorFondoTabla."'>\n");

//Cabecera de la tabla calendario
//Use the <caption> tag or just a normal table heading. Take your pick.
//$calendar .= "<caption class=\\"month\\">$date_info[month], $year</caption>\n";
$calendar .= ("<tr>\n").
("<th height='".$AltoCeldas."' colspan='7'>").
("<font color='".$ColorDiaFestivo."' size=".$TamanioFuente." face='".$TipoFuente."'>").
("$date_info[month], $year").
("</font>").
("</th>\n</tr>\n");

// Imprime los dias de la semana "Lun", "Mar", etc.
// Si day_heading_length es 4, aparecerá el nombre entero del dia
// si no, solo imprime los n primeros caracteres
if($day_heading_length > 0 and $day_heading_length <= 4){
$calendar .= "<tr>\n";
foreach($day_headings as $day_heading){
$calendar .= ("<th height='".$AltoCeldas."' abbr='".$day_heading."' class='dayofweek' bgcolor='".$ColorFondoCeldasDiaSemana."'>").
("<font color='".$ColorDiaLaboral."' size='".$TamanioFuente."' face='".$TipoFuente."'>").
($day_heading_length != 4 ? substr($day_heading, 0, $day_heading_length) : $day_heading).
("</font>").
("</th>\n");
}
$calendar .= "</tr>\n";
}
$calendar .= "<tr>\n";

//$weekday = $date_info['wday']; //Para que sea el Domingo el primer dia de la semana
$weekday = $date_info['wday']-1; #weekday (zero based) of the first day of the month
if ($weekday==-1) $weekday=6; //Por si el Domingo es el dia 1 del mes
$day = 1; #starting day of the month

// Cuidadin con los primeros dias "vacios" del mes
if($weekday > 0){
$calendar .= ("<td bgcolor='".$ColorFondoTabla).
("' colspan='".$weekday."'></td>\n");
}

//Imprimimos los dias del mes
while ($day <= $maxdays){
if($weekday == 7){ //Empieza una nueva semana
$calendar .= "</tr>\n<tr>\n";
$weekday = 0;
}

//Miro si el dia que voy a pintar es festivo
$esFestivo = 0;
$tmp_date=$day."/".$month;
for ($i=0;$i<14;$i++) {
if ($tmp_date==$DiasFestivos[$i]) {$esFestivo=1;break;}
}

$calendar .= ("<td width='".$AnchoCeldas).
("' height='".$AltoCeldas).
("' align='".$AlineacionHorizontalTexto).
("' valign='".$AlineacionVerticalTexto).
("' ");

// Coloreo el fondo dependiendo del dia en el que nos encontremos
$calendar .= "bgcolor='";
if (($day==$dia_actual) and
($month==$mes_actual) and
($year==$anio_actual)) { //Si el dia es el de hoy
$calendar .= $ColorFondoCeldaDiaActual;
} else { // Si el dia no es el de hoy
if (($weekday == 5) or ($weekday == 6) or ($esFestivo==1)) { // Si estoy en fin de semana weekday=5,6
$calendar .= $ColorFondoCeldasFestivo;
} else {
$calendar .= $ColorFondoCelda;
};
};
// Aqui es donde le pongo lo que tiene que hacer en caso de exista enlace
$link = (basename($_SERVER["PHP_SELF"]))."?fecha=".$month."/".$day."/".$year;
$calendar .= "'><a href='".$link."'><font color='";

if (($day==$dia_actual) and ($month==$mes_actual) and ($year==$anio_actual)) { //Si el dia es el de hoy
$calendar .= $ColorDiaActual;
} else { // Si el dia no es el de hoy
if (($weekday == 5) or ($weekday == 6) or ($esFestivo==1)) { // Si estoy en fin de semana weekday=5,6
$calendar .= $ColorDiaFestivo;
} else {$calendar .= $ColorDiaLaboral;};
};
$calendar .= ("' ").
("size='".$TamanioFuente."' ").
("face='".$TipoFuente."'><strong>".$day).
("</strong></font></a>").
("</td>\n");
$day++;
$weekday++;
}

//Cuidadin con los ultimos dias vacios del mes
if($weekday != 7){
$calendar .= '<td bgcolor="'.$ColorFondoTabla.'" colspan="' . (7 - $weekday) . '"></td>';
}

//Chinnnnn pon, devolvemos toda la cadena calendario
return $calendar . "</tr>\n</table>\n";
} // Fin de la funcion CalendarioPHP(año, mes, caracteres del dia)

echo CalendarioPHP(2003, 9, 2);
?>

Autor

Tomas Isasia

Consultor Analista de Sistemas

Compartir

Comentarios

Jorge Pinedo

03/10/2003
Está muy bueno el calendario. Pero hay algo que no me funciona bien. Es la conversión del mes. Se supone que de "January" debería cambiar a "Enero". Esto debería hacerlo con el "switch", pero no lo hace.

Yo cambié las siguientes líneas:

***************************************
switch ($date_info['mon']) {
    case "01" : $date_info['month']="Enero";break;
    case "02" : $date_info['month']="Febrero";break;
    case "03" : $date_info['month']="Marzo";break;
    case "04" : $date_info['month']="Abril";break;
    case "05" : $date_info['month']="Mayo";break;
    case "06" : $date_info['month']="Junio";break;
    case "07" : $date_info['month']="Julio";break;
    case "08" : $date_info['month']="Agosto";break;
    case "09" : $date_info['month']="Septiembre";break;
    case "10" : $date_info['month']="Octubre";break;
    case "11" : $date_info['month']="Noviembre";break;
    case "12" : $date_info['month']="Diciembre";break;
};
***************************************

Explico los cambios:

$date_info['mon'] : Contiene el mes en números. Por eso en las líneas "case" los valores en lugar de ser por ejemplo "January" debería ser "01".

$date_info['month'] : Contiene el mes en letras. Puse esto en lugar del $date_info[$month] que había antes.

En realidad no soy un experto y de hecho habrá alguna solución mejor, pero al menos así ya funciona.

Pablo

21/1/2005
Tome el codigo de Tomas Isasia con el arreglo de Jorge Pinedo y le agrege un formulario para adelantar o retroceder el año o el mes y le agrege una rutina para que calcule el viernes y jueves santo

<?
function retornapascua($year){
if (($year <= 325) or ($year > 4099)){
$dia=0;
$mes=0;
}else {
list($jDay,$jMonth)=EasterJulian($year);
if (($year > 325) && ($year <= 1582)) {
$dia=$jDay;
$mes=$jMonth;
}
else {
list($oDay,$oMonth)=EasterOrthodox ($year, $jDay, $jMonth);
list($wDay,$wMonth)=EasterWestern ($year);
if ($year <= 1923) {
$dia=$wDay;
$mes=$wMonth;
}
else {
$dia=$wDay;
$mes=$wMonth;
}
}
}
return array($dia,$mes);
}

function IntDiv ($num, $dvsr)
{
$negate = 0;
$result = 0;

if ($dvsr == 0)
return null;
else {
if ($num * $dvsr < 0 )
$negate = 1;
if ($num < 0)
$num = -$num;
if ($dvsr < 0)
$dvsr = -$dvsr;
$result = (($num - ($num % $dvsr)) / $dvsr);
if ($negate)
return -$result;
else
return $result;
}
}

function GetMonth($m)
{
switch($m){
case 3:
return ("Marzo");
break;
case 4:
return ("Abril");
break;
case 5:
return ("Mayo");
break;
}
}

function GetOrdinal($d)
{
$rmdr = $d % 10;
if ((($d >= 4) and ($d <= 20)) or ($rmdr == 0) or ($rmdr > 3))
return ($d + "th");
else {
switch($rmdr){
case 1:
return ($d + "st");
break;
case 2:
return ($d + "nd");
break;
case 3:
return ($d + "rd");
break;
}
}
}

function EasterJulian($year){

$g = $year % 19;
$i = (19 * $g + 15) % 30;
$j = ($year + IntDiv($year, 4) + $i) % 7;
$p = $i - $j + 28;

$jDay = $p;
$jMonth = 4;
if ($p > 31)
$jDay = $p - 31;
else
$jMonth = 3;
return array($jDay,$jMonth);
}

function EasterWestern($year)
{
$g = $year % 19;
$c = IntDiv($year, 100);
$h = ($c - IntDiv($c, 4) - IntDiv(8 * $c + 13, 25) + 19 * $g + 15) % 30;
$i = $h - IntDiv($h, 28) * (1 - IntDiv($h, 28) * IntDiv(29, $h + 1) * IntDiv(21 - $g, 11));
$j = ($year + IntDiv($year, 4) + $i + 2 - $c + IntDiv($c, 4)) % 7;
$p = $i - $j + 28;

$wDay = $p;
$wMonth = 4;
if ($p > 31)
$wDay = $p - 31;
else
$wMonth = 3;
return array($wDay,$wMonth);
}

function EasterOrthodox ($yr, $jDay, $jMonth)
{
$extra = 0;
$tmp = 0;

$oDay = 0;
$oMonth = 0;

if (($yr > 1582) && ($yr <= 4099)) {
$extra = 10;
if ($yr > 1600) {
$tmp = IntDiv($yr, 100) - 16;
$extra = $extra + $tmp - IntDiv($tmp, 4);
}

$oDay = $jDay + $extra;
$oMonth = $jMonth;

if (($oMonth == 3) && ($oDay > 31)) {
$oMonth = 4;
$oDay = $oDay - 31;
}

if (($oMonth == 4) && ($oDay > 30)) {
$oMonth = 5;
$oDay = $oDay - 30;
}
}
return array($oDay,$oMonth);
}

function domingopascua($Y) {
$N = $Y-1900;
$Y1 = $N/19;
$A=floor(($Y1-floor($Y1))*19+0.001);
$B1=(7*$A+1)/19;
$B=floor($B1);
$M1=(11*$A+4-$B)/29;
$M=floor(($M1-floor($M1))*29+0.001);
$Q1=$N/4;
$Q=floor($Q1);
$W1=($N+$Q+31-$M)/7;
$W=floor(($W1-floor($W1))*7+0.001);
$R=25-$M-$W;
$P = $R;
if ($R<=0) $P = 31 + $R;
$N=4;
if ($R<=0) $N=3;
$dia = $P;
$mes = $N;
return array($dia,$mes);
}

function CalendarioPHP($year, $month, $day_heading_length = 3){
$nombreFichero = basename($_SERVER['PHP_SELF']);
$ColorFondoCelda = '#CCCCCC';
$ColorFondoTabla = '#666666';
$ColorFondoCeldasDiaSemana = '#fff4bf';
$ColorFondoCeldasFestivo = '#ee0000';
$ColorFondoCeldasFinDeSemana = '#110000';
$ColorFondoCeldaDiaActual = '#00ff00';
$ColorDiaLaboral = '#444444';
$ColorDiaFestivo = '#ffffff';
$ColorDiaFinDeSemana = '#ffff00';
$ColorDiaActual = '#0000ff';
$TamanioFuente = '1';
$TipoFuente = 'Arial, Helvetica, sans-serif';
$AnchoCalendario = '1%';
$AltoCalendario = '1%';
$AnchoCeldas = '1%';
$AltoCeldas = '1%';
$AlineacionHorizontalTexto = 'center';
$AlineacionVerticalTexto = 'center';

// ----------- INICIO Dias Festivos ----------
$DiasFestivos[0] = '1/1'; // 1 de enero
$DiasFestivos[1] = '6/1'; // 6 de enero
$DiasFestivos[2] = '19/3'; // 19 de marzo
$DiasFestivos[3] = '1/5'; // 1 de mayo
$DiasFestivos[4] = '15/8'; // 15 de agosto
$DiasFestivos[5] = '12/10'; // 12 de octubre
$DiasFestivos[6] = '1/11'; // 1 de noviembre
$DiasFestivos[7] = '6/12'; // 6 de diciembre
$DiasFestivos[8] = '25/12'; // 25 de diciembre
// festivos Regionales
$DiasFestivos[9] = '2/5'; // 2 de mayo
$DiasFestivos[10] = '15/5'; // 15 de mayo
$DiasFestivos[11] = '9/9'; // 9 de noviembre
// Semana Santa
list($diampas,$mespas)=retornapascua($year);
$juevessant = date("j/n",mktime (0,0,0, $mespas, $diampas-3, $year));
$viernessant = date("j/n",mktime (0,0,0, $mespas, $diampas-2, $year));
$DiasFestivos[12] = $juevessant; // Jueves Santo
$DiasFestivos[13] = $viernessant; // Viernes Santo

$dia_actual=date("j",time());
$mes_actual=date("n",time());
$anio_actual=date("Y",time());

$first_of_month = mktime (0,0,0, $month, 1, $year);

static $day_headings = array('Domingo','Lunes','Martes','Miercoles','Jueves','Viernes','Sabado');
$maxdays = date('t', $first_of_month);
$date_info = getdate($first_of_month);
$month = $date_info['mon'];
$year = $date_info['year'];

switch ($date_info['mon']) {
case 1 : $date_info[month]="Enero";break;
case 2 : $date_info[month]="Febrero";break;
case 3 : $date_info[month]="Marzo";break;
case 4 : $date_info[month]="Abril";break;
case 5 : $date_info[month]="Mayo";break;
case 6 : $date_info[month]="Junio";break;
case 7 : $date_info[month]="Julio";break;
case 8 : $date_info[month]="Agosto";break;
case 9 : $date_info[month]="Septiembre";break;
case 10 : $date_info[month]="Octubre";break;
case 11 : $date_info[month]="Noviembre";break;
case 12 : $date_info[month]="Diciembre";break;
};

$calendar = ("<table ").
("border='0' ").
("height='".$AltoCalendario."' ").
("width='".$AnchoCalendario."' ").
("cellspacing='1' cellpadding='2' ").
("bgcolor='".$ColorFondoTabla."'> ");

$calendar .= ("<tr> ").
("<th height='".$AltoCeldas."' colspan='7'>").
("<font color='".$ColorDiaFestivo."' size=".$TamanioFuente." face='".$TipoFuente."'>").
("$date_info[month], $year").
("</font>").
("</th> </tr> ");

if($day_heading_length > 0 and $day_heading_length <= 4){
$calendar .= "<tr> ";
foreach($day_headings as $day_heading){
$calendar .= ("<th height='".$AltoCeldas."' abbr='".$day_heading."' class='dayofweek' bgcolor='".$ColorFondoCeldasDiaSemana."'>").
("<font color='".$ColorDiaLaboral."' size='".$TamanioFuente."' face='".$TipoFuente."'>").
($day_heading_length != 4 ? substr($day_heading, 0, $day_heading_length) : $day_heading).
("</font>").
("</th> ");
}
$calendar .= "</tr> ";
}
$calendar .= "<tr> ";

$weekday = $date_info['wday']; //Para que sea el Domingo el primer dia de la semana
//$weekday = $date_info['wday']-1;
if ($weekday==-1) $weekday=6;
$day = 1; #starting day of the month

if($weekday > 0){
$calendar .= ("<td bgcolor='".$ColorFondoTabla).
("' colspan='".$weekday."'></td> ");
}

while ($day <= $maxdays){
if($weekday == 7){
$calendar .= "</tr> <tr> ";
$weekday = 0;
}

$esFestivo = 0;
$tmp_date=$day."/".$month;
for ($i=0;$i<14;$i++) {
if ($tmp_date==$DiasFestivos[$i]) {$esFestivo=1;break;}
}

$calendar .= ("<td width='".$AnchoCeldas).
("' height='".$AltoCeldas).
("' align='".$AlineacionHorizontalTexto).
("' valign='".$AlineacionVerticalTexto).
("' ");

$calendar .= "bgcolor='";
if (($day==$dia_actual) and ($month==$mes_actual) and ($year==$anio_actual)) {
$calendar .= $ColorFondoCeldaDiaActual;
} else {
if (($esFestivo==1)) {
$calendar .= $ColorFondoCeldasFestivo;
} else {
if (($weekday == 0) or ($weekday == 6)) {
$calendar .= $ColorFondoCeldasFinDeSemana;
} else {
$calendar .= $ColorFondoCelda;
}
};
};
$fechalink = date("d/m/Y",mktime (0,0,0, $month, $day, $year));
$link = (basename($_SERVER["PHP_SELF"]))."?anoactual=$year&mesactual=$month&fecha=".$fechalink;
$calendar .= "'><a href='".$link."'><font color='";

if (($day==$dia_actual) and ($month==$mes_actual) and ($year==$anio_actual)) {
$calendar .= $ColorDiaActual;
} else {
if ($esFestivo==1){
$calendar .= $ColorDiaFestivo;
} else {
if (($weekday == 0) or ($weekday == 6)) {
$calendar .= $ColorDiaFinDeSemana;
}else{
$calendar .= $ColorDiaLaboral;
}
};
};
$calendar .= ("' ").
("size='".$TamanioFuente."' ").
("face='".$TipoFuente."'><strong>".$day).
("</strong></font></a>").
("</td> ");
$day++;
$weekday++;
}

if($weekday != 7){
$calendar .= '<td bgcolor="'.$ColorFondoTabla.'" colspan="' . (7 - $weekday) . '"></td>';
}
$calendar .= "</tr> ";
$calendar .= "<tr>";
$calendar .= "<td align='center' valign='center' colspan='7'>";
$calendar .= "<form method='POST' action='calendario.php' name='calendario' target='_self'>";
$calendar .= "<p><input type='submit' value='< -Mes' name='mesmenos'><input type='submit' value='<< -Año' name='anomenos'><input type='submit' value='+Año >>' name='anomas'><input type='submit' value='+Mes >' name='mesmas'></p>";
$calendar .= "<input type='hidden' name='anoactual' value='$year'><input type='hidden' name='mesactual' value='$month'>";
$calendar .= "</form>";
$calendar .= "</td>";
$calendar .= "</tr> ";
$calendar .= "</table> ";
return $calendar;
}

extract($_POST);
extract($_GET);

if ($mesactual==''){
$mesactual=date("n",time());
}
if ($anoactual==''){
$anoactual=date("Y",time());
}
$dia_actual=date("d",time());

$mes_actual = date("n",mktime (0,0,0, $mesactual, $dia_actual, $anoactual));
$anio_actual = date("Y",mktime (0,0,0, $mesactual, $dia_actual, $anoactual));

if ($mesmenos <>''){
$mes_actual = date("n",mktime (0,0,0, $mesactual-1, $dia_actual, $anoactual));
$anio_actual = date("Y",mktime (0,0,0, $mesactual-1, $dia_actual, $anoactual));
}
if ($mesmas <>''){
$mes_actual = date("n",mktime (0,0,0, $mesactual+1, $dia_actual, $anoactual));
$anio_actual = date("Y",mktime (0,0,0, $mesactual+1, $dia_actual, $anoactual));
}
if ($anomenos <>''){
$mes_actual = date("n",mktime (0,0,0, $mesactual, $dia_actual, $anoactual-1));
$anio_actual = date("Y",mktime (0,0,0, $mesactual, $dia_actual, $anoactual-1));
}
if ($anomas <>''){
$mes_actual = date("n",mktime (0,0,0, $mesactual, $dia_actual, $anoactual+1));
$anio_actual = date("Y",mktime (0,0,0, $mesactual, $dia_actual, $anoactual+1));
}

echo CalendarioPHP($anio_actual, $mes_actual, 4);
?>

Carlos Blanco

15/2/2007
//con este cambio os evitais los switch: acelera el proceso y tb funciona ;) 1 saludo al CMALEON.TK
static $xmeses=array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre', 'Noviembre','Diciembre');


//Traduzco los meses de ingles a Español
$date_info['month']=$xmeses[$month];

jesusjh

09/9/2011
Preguntar
Alguien sabe lo que tengo que hacer para marca el dia de un calendario.
Gracias.

fevimo

31/1/2013
Calendario dias festivos
He puesto en marcha este calendario y funciona todo menos ir al mes siguiente.Os agrdeceré me digais donde está el error.-Gracias

brujo92

08/10/2013
calendario
Guardar archivo como calendario.php

Elmago55

29/8/2014
Reconocer Sabados y/o domingos
Hola como aporte les dejo una rutina para reconocer sabados y/o domingos
/* Saturday = Sabado , Sunday = Domingo, para la configuracion setlocaltime en ingles, tambien podemos cambiarla a español y cambar la condicion */
function sabadodomingo($fec) {
$diaDeLaSemana = strftime("%A",strtotime($fec)); //Obtenemos el nombre del día de la semana
if($diaDeLaSemana == "Saturday" || $diaDeLaSemana == "Sunday") { $finDeSemana = true; }
else { $finDeSemana = false; }
return $finDeSemana; }

la forma de usar es simple solo debemos llamar a la función con una fecha dentro y nos devolverá true o 1 si se trata de un sábado o domingo Ej. Conocer los sábados y domingos dentro de los 30 primeros días de agosto de 2014
for ($i=1; $i <30 ; $i++) { $val = $i."-08-2014";
echo "Cayo en Sábado o domingo la fecha : $val ?<b>".sabadodomingo($val),"</b><br>"; }