PHP arrays.

Iniciado por mgarcia.informatico, 29 Enero 2015, 16:52 PM

0 Miembros y 1 Visitante están viendo este tema.

_Enko

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.

Usuario Invitado

#11
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 (php) [Seleccionar]
$month = substr("30/05/2014",3,2);

foreach($months as $key => $value) {
if($key >= $month) {
echo $value."<br/>";
if($key === 12)
echo $months[1];
}
}


Practicar resolviendo ejercicios algorítmicos para que desarrolles tu lógica.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

MinusFour

Cita de: Gus Garsaky 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 (php) [Seleccionar]
$month = substr("30/05/2014",3,2);

foreach($months as $key => $value) {
if($key >= $month) {
echo $value."<br/>";
if($key === 12)
echo $months[1];
}
}


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:

Cita de: mgarcia.informatico en 29 Enero 2015, 16:52 PM
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.

Usuario Invitado

#13
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 (php) [Seleccionar]
<?php

$date 
explode("/","25/04/2012"); // array dia/mes/año de la fecha antigua
$now getDate();
$now explode("/",$now["mday"]."/".$now["mon"]."/".$now["year"]); // array dia/mes/año actual

// constantes que definen el primer y ultimo mes a mostrar
define("INITIAL_MONTH", (int) $date[1]);
define("LAST_MONTH", (int) $now[1]);

$year_diff = (int)$now[2] - (int)$date[2]; // diferencia en años
$months_diff = ($year_diff 12) + (int)$now[1] - (int)$date[1]; // diferencia en meses

echo "<br />";

$currentMonth INITIAL_MONTH// el primer que se mostrara
// como $currentMonth no inicia en 1, le sumamos al total de meses INITIAL_MONTH
// Ej. si INITIAL_MONTH = 4 (abril), months_diff sumará 4 meses al total
while($currentMonth <= $months_diff INITIAL_MONTH) {
// cuando el mes sea 12 se imprime el mes y se reinicia la variable de control
// para que empiece a contar desde enero. Tambien se le restan 12 meses al total
// de meses ya que hemos descontado 12 a la variable de control
if($currentMonth === 12) {
print($months[$currentMonth]."<br />");
$currentMonth 1;
$months_diff -= 12;
}
print($months[$currentMonth]."<br />");
$currentMonth++;
}
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

MinusFour

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.