Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: mgarcia.informatico en 29 Enero 2015, 16:52 pm



Título: PHP arrays.
Publicado por: mgarcia.informatico en 29 Enero 2015, 16:52 pm
Estimados necesito su ayuda... necesito hacer una funcion que me imprima los meses desde una fecha seleccionada hasta la fecha actual.. es decir.. si yo selecciono una fecha 10/05/2014 .... deberia imprimir

Mayo  -  junio  - julio   -agosto- septiembre - octubre - noviembre - diciembre -    enero

No se si me explico.. bien...

Actualmente tengo esto... funciona bien pero no me sirve para que lo que quiero...

Código
  1.  
  2. $meses = Array(
  3. 1 => "enero",
  4. 2 => "febrero",
  5. 3 => "marzo",
  6. 4 => "abril",
  7. 5 => "mayo",
  8. 6=> "junio",
  9. 7 => "julio",
  10. 8 => "agosto",
  11. 9 => "septiembre",
  12. 10 => "octubre",
  13. 11 => "noviembre",
  14. 12 => "diciembre"
  15. );
  16.  
  17. function getMeses($mes) {
  18. global $meses;
  19. $str = explode("/", '10/05/2014');
  20. $mesActual = $str[1];
  21.  
  22. foreach ($meses as $key => $mes){
  23. $value = strtolower(substr($mes, 0, 3));
  24.  
  25. if($key > $mesActual){
  26. echo $value."<br>";
  27. }
  28. else if($key == $mesActual) {
  29. echo $value."<br>";
  30. }
  31. }
  32. //return $value;
  33. }
  34.  
  35. $leeMeses = getMeses($mes);
  36. echo $leeMeses;
  37.  


Mod: Temas sobre PHP al subforo de PHP. No escribir títulos en mayúsculas.


Título: Re: PHP arrays.
Publicado por: MinusFour en 29 Enero 2015, 21:32 pm
Sacas bien el mes de la fecha de la cual quieres contar, pero en ningun momento sacas la fecha actual. Encima, tu script no considera los años, por lo que solo contaria hasta diciembre y no tomaria el enero del 2015.

Una forma seria contar el total de meses desde entonces y luego empezar a imprimir el mes de ahí.


Título: Re: PHP arrays.
Publicado por: mgarcia.informatico en 30 Enero 2015, 13:55 pm
Hola...

Claro.. ahora.. el script esta imprimiendo desde el mes de la fecha ingresada...hasta diciembre... el cual son los meses que estan en el array...

Lo que quiero es hacer un script que imprima.. desde la fecha ingresada hasta la actual.... pero al parecer aparte de un array de meses..tambien deberia haber de años.. creo!!!!

me puedes ayudar o los que leen este tema.. ayudenme porfavor.. como hacerlo.

Saludos...le agradeceria. mucho



Título: Re: PHP arrays.
Publicado por: 3n31ch en 30 Enero 2015, 14:07 pm
Lo lamento pero no me di el tiempo de leer el código, pero en fin.

No necesitas uno de años, puesto que cuando llegues al ultimo mes solo empieza desde el inicio otra vez hasta llegar al que coincida.

por ejemplo tienes un arreglo de 3 meces:

Enero, Febrero, Marzo.... Estamos en Enero pero el programa parte desde Febrero:
[ 0 ]         [1]        [2]

Febrero - Marzo - Enero: 1 - 2 - 0

No se si se me entiende, si quieres te agrego código


Título: Re: PHP arrays.
Publicado por: mgarcia.informatico en 30 Enero 2015, 14:26 pm
Hola.. Estimado gracias por responder.

Claro la idea de este script es lo que indicas tu....

Es decir.. si la fecha actual es 30/01/2015..... pero yo ingreso una fecha de 10/08/2014... quiero generar un script que imprima.. los meses desde la fecha que ingreso hasta la fecha actual...
es decir... la salida seria....

Agosto  -  septiembre - octubre - noviembre - dicembre - Enero

Por fa me puedes ayudar con codigo...
Saludos Cordiales


Título: Re: PHP arrays.
Publicado por: _Enko en 30 Enero 2015, 15:29 pm
Hola, te paso algunos tips:

1)Debes verificar que la fecha seleccionada sea inferior a la actual.
2)Debes averiguar la cantidad de meses que han pasado.

Y en el codigo, seria algo como:
Código
  1. $cantidad_meses   = obtenerCantidadMeses($fecha_inicial, $fecha_final);
  2. $contador = obtenerMesInicial($fecha_inicial);
  3. for($i = 0; i$ <= $cantidad_meses; $i++){
  4.     salida(vector_meses[$contador]);
  5.     $contador++;
  6.     if($contador >=  12)
  7.         $contador = 1;
  8. }  
  9.  

Basicamente utilizas  un contador para la cantidad de meses que necesitas imprimir, y otro internamente para el mes que se esta imprimiendo. Si es igual a 12, entonces lo reseteas a 1.

si la fecha inicial es 1/1/2012 y la actual 1/1/2014, vas a necesitar imprimir 24 meses, empezando con el mes 1. Total, en el ejercicio no te piden que digas el año al que corresponde el mes.

Saludos.


Título: Re: PHP arrays.
Publicado por: mgarcia.informatico en 30 Enero 2015, 15:40 pm
Seria... ideal saber que meses corresponde a tal año... pero en fin no debe ser tan complejo asociarlo...

lo que me gustari que me explicaras por favor es de donde saldria estos datos y como se haria en codigo.

obtenerCantidadMeses($fecha_inicial, $fecha_final);

obtenerMesInicial($fecha_inicial);

Te lo agradeceria..
Saludos


Título: Re: PHP arrays.
Publicado por: MinusFour en 30 Enero 2015, 16:09 pm
Código
  1. //Cantidad Meses:
  2. $now = DateTime();
  3. //Fecha debe ser un formato valido
  4. //http://php.net/manual/es/datetime.formats.date.php
  5. $then = DateTime($fecha);
  6.  
  7. $di = date_diff($now, $then);
  8. $mSinceThen = ($di->y * 12) + $di->m;
  9.  
  10. //Mes en ese entonces:
  11. $mThen = (int)($then->format('m'));


Título: Re: PHP arrays.
Publicado por: _Enko en 30 Enero 2015, 16:16 pm
Buenos, Minus.Four ya te paso el codigo para obtener los meses.
Salida sería algun tipo de "echo".

Saludos.


Título: Re: PHP arrays.
Publicado por: mgarcia.informatico en 30 Enero 2015, 16:18 pm
Estimado..

Estoy casi por resolverlo..

pero estoy enredado..

El codigo anterior que me mandastes para sacar el conteo del mes ingresado hasta el actual, y luego imprimir... como se hace.. este es tu codigo...

Código
  1. $cantidad_meses   = obtenerCantidadMeses($fecha_inicial, $fecha_final);
  2. $contador = obtenerMesInicial($fecha_inicial);
  3. for($i = 0; i$ <= $cantidad_meses; $i++){
  4.     salida(vector_meses[$contador]);
  5.     $contador++;
  6.     if($contador >=  12)
  7.         $contador = 1;
  8. }  
  9.  
  10.  

de donde sale esto...  obtenerCantidadMeses($fecha_inicial, $fecha_final);
y esto tambien ......    obtenerMesInicial($fecha_inicial);
y esto es correcto ....   salida(vector_meses[$contador]);

y al final como imprime.. en donde se hace el echo para imprimir... por fa ayudame.. se que estamos casi listo para resolver el problema...

Saludos Cordiales


Título: Re: PHP arrays.
Publicado por: _Enko en 30 Enero 2015, 23:37 pm
Es algo que tendras que escribir tu, lo que coloqué fue una especie de pseudocodigo. Tambien Minus.Four te ha pasado codigo para calcular los meses que  hay pasado entre las dos fechas.

No se trata de hacer copy-past. Sino entender lo que estas haciendo. No se resuelven tareas sino se ayuda a aprender en este foro.
Saludos.


Título: Re: PHP arrays.
Publicado por: Usuario Invitado en 1 Febrero 2015, 14:18 pm
Con el permiso de @MinusFour y los presentes.

Tu duda principal trata de cómo puedes imprimir los meses a partir de una fecha, ¿cierto?

Creo que por lógica lo puedes resolver con simple pseudocódigo, simplemente es identificar el mes e imprimir los meses posteriores. Si identificas un mes, lo haces por medio de su número en el calendario. Luego recorres los meses y condicionas que te imprima el mes siempre y cuando sea mayor al mes ingresado.

Código
  1. $month = substr("30/05/2014",3,2);
  2.  
  3. foreach($months as $key => $value) {
  4. if($key >= $month) {
  5. echo $value."<br/>";
  6. if($key === 12)
  7. echo $months[1];
  8. }
  9. }

Practicar resolviendo ejercicios algorítmicos para que desarrolles tu lógica.


Título: Re: PHP arrays.
Publicado por: MinusFour en 1 Febrero 2015, 16:32 pm
Con el permiso de @MinusFour y los presentes.

Tu duda principal trata de cómo puedes imprimir los meses a partir de una fecha, ¿cierto?

Creo que por lógica lo puedes resolver con simple pseudocódigo, simplemente es identificar el mes e imprimir los meses posteriores. Si identificas un mes, lo haces por medio de su número en el calendario. Luego recorres los meses y condicionas que te imprima el mes siempre y cuando sea mayor al mes ingresado.

Código
  1. $month = substr("30/05/2014",3,2);
  2.  
  3. foreach($months as $key => $value) {
  4. if($key >= $month) {
  5. echo $value."<br/>";
  6. if($key === 12)
  7. echo $months[1];
  8. }
  9. }

Practicar resolviendo ejercicios algorítmicos para que desarrolles tu lógica.

Realmente lo que hace ese codigo (que es muy parecido al suyo) es contar desde el mes que sacaste de la fecha a enero. El primer post dice esto:

necesito hacer una funcion que me imprima los meses desde una fecha seleccionada hasta la fecha actual..

Por lo que a menos que estemos en enero, el codigo no funciona correctamente. Por ejemplo, si estuvieramos en noviembre del 2014, contaria diciembre y enero tambien. Encima, no esta contemplando los meses después del primer año.


Título: Re: PHP arrays.
Publicado por: Usuario Invitado en 1 Febrero 2015, 18:09 pm
Ya veo. Creo que la solución sería algo así, aunque supongo que se puede optimizar, no conozco muy bien PHP en realidad.

Código
  1. <?php
  2.  
  3. $date = explode("/","25/04/2012"); // array dia/mes/año de la fecha antigua
  4. $now = getDate();
  5. $now = explode("/",$now["mday"]."/".$now["mon"]."/".$now["year"]); // array dia/mes/año actual
  6.  
  7. // constantes que definen el primer y ultimo mes a mostrar
  8. define("INITIAL_MONTH", (int) $date[1]);
  9. define("LAST_MONTH", (int) $now[1]);
  10.  
  11. $year_diff = (int)$now[2] - (int)$date[2]; // diferencia en años
  12. $months_diff = ($year_diff * 12) + (int)$now[1] - (int)$date[1]; // diferencia en meses
  13.  
  14. echo "<br />";
  15.  
  16. $currentMonth = INITIAL_MONTH; // el primer que se mostrara
  17. // como $currentMonth no inicia en 1, le sumamos al total de meses INITIAL_MONTH
  18. // Ej. si INITIAL_MONTH = 4 (abril), months_diff sumará 4 meses al total
  19. while($currentMonth <= $months_diff + INITIAL_MONTH) {
  20. // cuando el mes sea 12 se imprime el mes y se reinicia la variable de control
  21. // para que empiece a contar desde enero. Tambien se le restan 12 meses al total
  22. // de meses ya que hemos descontado 12 a la variable de control
  23. if($currentMonth === 12) {
  24. print($months[$currentMonth]."<br />");
  25. $currentMonth = 1;
  26. $months_diff -= 12;
  27. }
  28. print($months[$currentMonth]."<br />");
  29. $currentMonth++;
  30. }


Título: Re: PHP arrays.
Publicado por: MinusFour en 1 Febrero 2015, 18:49 pm
Si... esa solucion puede pasar por correcta. Realmente es la misma solucion que proponia Enko, aunque el objetivo era que el OP conectara los puntos.