Foros del Web » Programando para Internet » PHP »

Cuantos lunes tiene un año

Estas en el tema de Cuantos lunes tiene un año en el foro de PHP en Foros del Web. Buenas, Sabe alguien si existe una función para calcular cuantos lunes, martes, .... tiene un año en concreto? Gracias...
  #1 (permalink)  
Antiguo 09/12/2017, 17:31
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 meses
Puntos: 4
Cuantos lunes tiene un año

Buenas,
Sabe alguien si existe una función para calcular cuantos lunes, martes, .... tiene un año en concreto?

Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #2 (permalink)  
Antiguo 09/12/2017, 18:09
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Cuantos lunes tiene un año

http://www.forosdelweb.com/f18/conta...c-mes-1001845/

Ve eso a ver si te sirve
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 09/12/2017, 21:56
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cuantos lunes tiene un año

Haría esto

Código PHP:
Ver original
  1. function weekDayOnYear($day,$year){
  2. $md = array(31,28,31,30,31,30,31,31,30,31,30,31); //days to use
  3. $c = 0; //counter
  4.     for($k=0;$k<sizeof($md);$k++){ //loop for months
  5.     $dUse = $md[$k]; //how much days for the loop
  6.         if($k == 1 && $year%4 == 0 && (!($year%100 == 0) || $year%400 == 0)){ $dUse = 29; } //if leap year
  7.        
  8.         for($n=0;$n<$dUse;$n++){ //loop for days
  9.             if(intval(date("N", strtotime("$year-".($k+1)."-".($n+1)))) == $day){ //if day
  10.             $c++; //count
  11.             }
  12.         }
  13.        
  14.     }
  15. return $c; //return
  16. }

Donde:
year: año a verificar
day: día de la semana 1-7 de lunes a domingo

Ex:

Código PHP:
Ver original
  1. $lunes = weekDayOnYear(1,2017){
  2. echo "2017 tiene $lunes Lunes";

Saludos
  #4 (permalink)  
Antiguo 10/12/2017, 00:20
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Cuantos lunes tiene un año

Hay perdonen si mi función es mas rudimentaria pero mi lógica me dice que yo lo haga asi :D

Código PHP:
Ver original
  1. <?php
  2. function count_day_in_year($year, $day = 1){
  3.     $total = 52;
  4.     $check = date('L', mktime(0,0,0,1,1, $year));
  5.    
  6.     if($check){
  7.         $n_days = date('t', mktime(0,0,0,12,1, $year));
  8.         $last_day =  date('N', mktime(0,0,0,12,$n_days, $year));
  9.        
  10.         $total = $day == $last_day ? 53 : 52;
  11.     }
  12.    
  13.     return $total;
  14. }
  15.  
  16. echo count_day_in_year(2020, 4);// en este año hay un jueves extra

Explico, si un año completo tiene 52 semanas por ende debe tener 52 lunes, 52 martes... etc.

Pero dado que cada 4 años hay año bisiesto, ese ultimo día del año esta de mas por lo que basta con comprobar si es o no año bisiesto y cual es ese día extra.

por lo que hice un check, si es bisiesto procedo a buscar ese día, caso contrario asumo y mando directo como respuesta 52 para cualquier día.
  #5 (permalink)  
Antiguo 10/12/2017, 07:52
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cuantos lunes tiene un año

No estimado realmente en todo x año hay un día que tiene 53 y en un bis. hay 2*53

Es más 52*7=364

Por lo tanto hay que sumar un día de modo que:
52*7+1=365, eso significa que un día tiene que tener un día de más
Para un bis:
52*7+1+1=366, eso significa que por la intercalación de días hay 2 días que tienen 53

Edito: Optimizo mi código

Código PHP:
Ver original
  1. function dayOfWeekOnYear($day,$year){
  2. $md = array(31,28,31,30,31,30,31,31,30,31,30,31); //days to use
  3. if($year%4 == 0 && (!($year%100 == 0) || $year%400 == 0)){ $md[1]++; } //if leap year +1 to february
  4.  
  5. $c = 0; //counter
  6.     for($k=0;$k<sizeof($md);$k++){ //loop for months
  7.         for($n=0;$n<$md[$k];$n++){ //loop for days
  8.             if(intval(date("N", strtotime("$year-".($k+1)."-".($n+1)))) == $day){ //if day
  9.             $c++; //count
  10.             }
  11.         }
  12.     }
  13. return $c; //return
  14. }

Saludos

Última edición por alvaro_trewhela; 10/12/2017 a las 16:06
  #6 (permalink)  
Antiguo 11/12/2017, 13:38
Avatar de el_agu_4ever  
Fecha de Ingreso: agosto-2004
Mensajes: 230
Antigüedad: 19 años, 7 meses
Puntos: 5
Respuesta: Cuantos lunes tiene un año

Muy bueno. La lógica te dice que viendo el primer dia del año, que dia es, ese dia de la semana va a haber uno mas (53). Luego hay que tener en cuenta los bisiestos
  #7 (permalink)  
Antiguo 11/12/2017, 14:36
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: Cuantos lunes tiene un año

un año tiene 52 semanas, por lo que yo daría por sentado que tenemos 50 lunes por año y analizaría la primera y la ultima semana del año para comprobar si el lunes de la misma cae en dicho año
  #8 (permalink)  
Antiguo 12/12/2017, 14:43
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Cuantos lunes tiene un año

Código PHP:
Ver original
  1. <?php
  2. function dayInYear($year) {
  3.     $names = ['domingo', 'lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado'];
  4.     $days = array_fill(0, 7, 52);
  5.     $fistDayInYear = new DateTime("{$year}-01-01");
  6.     $days[$fistDayInYear->format('w')] += 1;
  7.     $days[($fistDayInYear->format('w') + 1) % 7] += $fistDayInYear->format('L');
  8.  
  9.     return array_combine($names, $days);
  10. }
  11.  
  12. $days = dayInYear(2017);
  13. var_dump($days);
  #9 (permalink)  
Antiguo 12/12/2017, 20:33
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cuantos lunes tiene un año

Muchos aportes, esperemos que a mblasoc les sirva.

Etiquetas: año, lunes
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:40.