Foros del Web » Programando para Internet » PHP »

problema con mktime

Estas en el tema de problema con mktime en el foro de PHP en Foros del Web. Buenos días: Tengo un problema con la función mktime de php. Necesito saber, dado un día concreto, en qué semana del año está. Para ello, ...
  #1 (permalink)  
Antiguo 22/11/2011, 03:47
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 8 meses
Puntos: 0
problema con mktime

Buenos días:


Tengo un problema con la función mktime de php.

Necesito saber, dado un día concreto, en qué semana del año está.

Para ello, tengo el siguiente código:


$semana_1_del_ano=date('W', mktime(0,0,0,$month,1,$year));
$semana_del_dia_que_quiero= date('W', mktime(0,0,0,$month,$dia_,$year));
$semana_real=$semana_del_dia_que_quiero-$semana_1_del_ano;


Todo funcionaba correctamente, hasta llegar al 2 del 1 del 2012.

Si introduzco el día 2 del 1 de 2012, me resulta lo siguiente:

semana_1_del_ano=52 //¿pero no tendría que ser 0??
semana_del_dia_que_quiero=1
semana_real= -51

Estube pensando que quizá era porque mktime empieza las semanas en los domingos..(0 domingos, 6 sábado), pero, analizándolo...no le veo sentido.


¿alguien puede echarme una mano?

Gracias
  #2 (permalink)  
Antiguo 22/11/2011, 05:46
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: problema con mktime

Es lógico.

Es la semana 52 del año 2011.

El año 2012 empieza su primera semana el lunes, 2 de enero :D

Puedes verlo aqui: http://www.calendario-365.es/calendario-2012.html
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 22/11/2011, 06:00
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: problema con mktime

...vaya hombre!!! entonces... se te ocurre alguna idea de como narices hacer lo que quiero??

quiero que el día 1 de cada mes comience la semana 1 del mes (así que la semana 1 del mes no tiene por qué tener 7 días, evidentemente), y después, saber un determinado día del mes en qué semana está.

Estoy bloqueadaaaa!!!!
  #4 (permalink)  
Antiguo 22/11/2011, 06:17
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: problema con mktime

Puedes crearte tu una funcion q te lo diga...

en plan algo así
Código PHP:

function semana_del_mes($dia$mes$anyo) {
   
$timestamp mktime(0,0,0,$mes,$dia,$anyo);
   
$dias_del_mes date('t'$timestamp); //Sabemos si tiene 28, 29, 30 o 31!
   
$dia_de_la_semana date('N'$timestamp); //Sabemos si es lunes, martes, etc..
   
$resto_primera_semana $dia_de_la_semana 6//Así sabemos cuantos dias tiene la primera semana!
   
$semana[0] = $resto_primera_semana//Si la primera semana es hasta el día 4, ese será el valor!
   
$i 1;
   for(
$dia_ $resto_primera_semana+1$dia_ $dias_del_mes$dia_ += 7) {
       
$semana[$i] = $dia_ 6;
       
$i++;
   }
   foreach (
$semana as $s => $dia_final) {
        if(
$dia <= $dia_final) return $s+1;
   }

Si no entiendes algo, encantado de explicartelo! :)
PD: No lo he probado...
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 22/11/2011, 06:26
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: problema con mktime

Anonadada me ha dejado con esa peazo función!!!!!!! jaja!!!

Se acaba mi horario de trabajo. Mañana pruebo y te digo!!!


muuuuuuchas gracias!!!
  #6 (permalink)  
Antiguo 22/11/2011, 06:30
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: problema con mktime

Cita:
Iniciado por elena_83es Ver Mensaje
Anonadada me ha dejado con esa peazo función!!!!!!! jaja!!!

Se acaba mi horario de trabajo. Mañana pruebo y te digo!!!


muuuuuuchas gracias!!!
He tenido q darle un par de vueltas, no te creas xDD

Ha sido un "reto" interesante! Ya me contarás si funciona :)

Edit:

Pequeño fallo q acabo de ver:
Código PHP:
function semana_del_mes($dia$mes$anyo) {
   
$timestamp mktime(0,0,0,$mes,$dia,$anyo);
   
$dias_del_mes date('t'$timestamp); //Sabemos si tiene 28, 29, 30 o 31!
   
$dia_de_la_semana date('N'$timestamp); //Sabemos si es lunes, martes, etc..
   
$resto_primera_semana abs($dia_de_la_semana 7); //Así sabemos cuantos dias tiene la primera semana!
   
$semana[0] = $resto_primera_semana+1//Si la primera semana es hasta el día 4, ese será el valor!
   
$i 1;
   for(
$dia_ $resto_primera_semana+1$dia_ $dias_del_mes$dia_ += 7) {
       
$semana[$i] = $dia_ 6;
       
$i++;
   }
   foreach (
$semana as $s => $dia_final) {
        if(
$dia <= $dia_final) return $s+1;
   }

__________________
>> Eleazan's Source
>> @Eleazan
  #7 (permalink)  
Antiguo 23/11/2011, 05:20
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: problema con mktime

Lamento decirte que no funciona....mira, pruebo con el mes de noviembre de 2011..y voy imprimiendo a ver si me lo hace bien...y esto es lo que me devuelve (teniendo en cuenta que semana_real es el resultado de la funcioncita tuya)
dia= 1 semana_real= 1
dia= 2 semana_real= 1
dia= 3 semana_real= 2
dia= 4 semana_real= 2
dia= 5 semana_real= 1
dia= 6 semana_real= 1
dia= 7 semana_real= 2
dia= 8 semana_real= 2
dia= 9 semana_real= 2
dia= 10 semana_real= 3
dia= 11 semana_real= 3
dia= 12 semana_real= 2
dia= 13 semana_real= 3
dia= 14 semana_real= 3
dia= 15 semana_real= 3
dia= 16 semana_real= 3
dia= 17 semana_real= 4
dia= 18 semana_real= 4
dia= 19 semana_real= 3
dia= 20 semana_real= 4
dia= 21 semana_real= 4
dia= 22 semana_real= 4
dia= 23 semana_real= 4
dia= 24 semana_real= 5
dia= 25 semana_real= 5
dia= 26 semana_real= 4
dia= 27 semana_real= 5
dia= 28 semana_real= 5
dia= 29 semana_real= 5
dia= 30 semana_real= 5
dia= 31 semana_real= 6


...

voy a ver si sigo dandole vueltas...


muchas gracias de todas formas
  #8 (permalink)  
Antiguo 24/11/2011, 05:58
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: problema con mktime

hice una chapucilla...pero me vale!!!
gracias por la atención :)

Etiquetas: mktime
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 10:26.