Foros del Web » Programando para Internet » PHP »

¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

Estas en el tema de ¿Como saber cuantos Martes (p.ej) tiene un determinado mes? en el foro de PHP en Foros del Web. Seguro que es muy fácil pero se me presenta esa duda y no se me ocurre como, o si, pero no es muy ortodoxo. Estoy ...
  #1 (permalink)  
Antiguo 15/02/2010, 17:02
 
Fecha de Ingreso: febrero-2010
Mensajes: 36
Antigüedad: 14 años, 2 meses
Puntos: 0
¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

Seguro que es muy fácil pero se me presenta esa duda y no se me ocurre como, o si, pero no es muy ortodoxo.

Estoy haciendo una aplicación en la que en una base de datos tengo que guardar que determinado día de la semana durante todo un mes habrá una actividad a cierta hora.

Averiguar el día del mes del primer Martes, o el día que sea me es fácil y, a partir de ahí puedo ir multiplicando por 7 con la ayuda de mktime para ir guardando los timestamps. La duda que se me plantea realmente es cuando parar.

Hay meses que tienen 4 Martes, otros 5, etc...

¿Como?

Alguna idea? Gracias
  #2 (permalink)  
Antiguo 15/02/2010, 17:04
Avatar de djsos  
Fecha de Ingreso: septiembre-2007
Ubicación: Madrid-España
Mensajes: 374
Antigüedad: 16 años, 7 meses
Puntos: 14
Respuesta: ¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

Hola fennesz

utiliza la funcion r de date te muestra la fecha completa y de hay trabajas con time sumando o restando o buscando coincidencias. Es lo primero que se me ocurre pero seguo que gator se saca una funcion de la manga y me deja super mal.

Un Saludo
__________________
Es de bien nacidos ser agradecidos.
Desarrollo de software a medida | TPV Comercios
  #3 (permalink)  
Antiguo 15/02/2010, 17:29
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: ¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

O sino podes usarla clase DateTime que es mucho mas sencilla, te dejo los links que necesitas del manual

- http://www.php.net/manual/en/datetime.construct.php
- http://www.php.net/manual/en/datetime.format.php
- http://www.php.net/manual/en/datetime.modify.php
__________________
HV Studio
Diseño y desarrollo web
  #4 (permalink)  
Antiguo 15/02/2010, 17:48
 
Fecha de Ingreso: febrero-2010
Mensajes: 36
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

Gracias Jackson, stoy habituado a esas clases/funciones, pero la verdad es que no encuentro la solución al dilema. Creo tener una solución pero no es demasiado elegante, y pensaba que habría una función fácil que los grandes gurús del php tendrían a mano.

Gracias de todas formas
  #5 (permalink)  
Antiguo 15/02/2010, 18:47
 
Fecha de Ingreso: febrero-2010
Mensajes: 36
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

Bueno, tras buscar y combinar un par de funciones he obtenido esto, por si a alguien le sirve:

Código PHP:
Ver original
  1. function diaS($mes, $diasem){
  2.     if(trim($mes)!="")    {
  3.        
  4.         if (((fmod(date('Y'),4)==0) and (fmod(date('Y'),100)!=0)) or (fmod(date('Y'),400)==0)) {
  5.        $dias_febrero = 29;
  6.    } else {
  7.        $dias_febrero = 28;
  8.    }
  9.    switch($mes) {
  10.        case 01: $cant_dias = 31; break;
  11.        case 02: $cant_dias = $dias_febrero; break;
  12.        case 03: $cant_dias = 31; break;
  13.        case 04: $cant_dias = 30; break;
  14.        case 05: $cant_dias = 31; break;
  15.        case 06: $cant_dias = 30; break;
  16.        case 07: $cant_dias = 31; break;
  17.        case 08: $cant_dias = 31; break;
  18.        case 09: $cant_dias = 30; break;
  19.        case 10: $cant_dias = 31; break;
  20.        case 11: $cant_dias = 30; break;
  21.        case 12: $cant_dias = 31; break;
  22.    }
  23.        
  24.         $nummber = 0;
  25.         for($i=1; $i<=$cant_dias; $i++)    {
  26.             if(date('w',strtotime(date('Y').'-'.$mes.'-'.$i))==$diasem)    {
  27.                 $nummber++;
  28.             }
  29.         }
  30.         return $nummber;
  31.     }else    {
  32.         return 'Malll';
  33.     }
  34. }
  35.  
  36. echo diaS(02, 1);

Por cierto, alguien sabe porque el parametro "t" de date, da 31 al mes de Febrero??

Casi me vuelvo loco, al final recurrí a el switch, sino...
  #6 (permalink)  
Antiguo 15/02/2010, 20:23
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: ¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

un mes tiene ó 4 ó 5 martes.
Si la diferencia entre la cantidad de días del mes y el número correspondiente al primer martes es mayor o igual que 28, entonces ese mes tiene 5 martes, sino tiene 4
__________________
no quiero ser un árbol y caminar
Jacinto Piedra
  #7 (permalink)  
Antiguo 15/02/2010, 20:43
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: ¿Como saber cuantos Martes (p.ej) tiene un determinado mes?

Te la dejo un poco mas sencillo =)

Código PHP:
<?php
$d 
= new DateTime('2010/01/01');
for(
$i 0$i 12$i++){
    
    
$d->modify("+$i month");
    
    
$meses = array(
                    
'01' => 31,
                    
'02' => 28
                    
'03' => 31
                    
'04' => 30
                    
'05' => 31
                    
'06' => 30
                    
'07' => 31
                    
'08' => 31
                    
'09' => 30
                    
'10' => 31,
                    
'11' => 30
                    
'12' => 31
                  
);
    
    
$contador 0;
    
    
$total = ($i 9) ? $meses['0'.($i+1)] : $meses[($i+1)];
    
    for(
$v 1$v <= $total$v++){
        
        
$d->modify("+1 days");
        (
$d->format('D') == 'Tue') ? $contador++ : null;
        
    }
    
    echo 
"El mes numero ".($i+1)." tiene $contador dias martes<br />";
    
}
?>
__________________
HV Studio
Diseño y desarrollo web

Etiquetas: determinado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:58.