Foros del Web » Programando para Internet » PHP »

Fecha duplicada en un arreglo de días

Estas en el tema de Fecha duplicada en un arreglo de días en el foro de PHP en Foros del Web. Buenas, mi consulta es la siguiente, tengo una rutina que muestra primero una serie de dias de forma numérica (La cantidad de días puede ser ...
  #1 (permalink)  
Antiguo 16/10/2009, 19:00
Avatar de rfadgrmm  
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 14 años, 10 meses
Puntos: 1
Fecha duplicada en un arreglo de días

Buenas, mi consulta es la siguiente, tengo una rutina que muestra primero una serie de dias de forma numérica (La cantidad de días puede ser variable, especifico 8 días como referencia), luego declaro una fecha base (Ejemplo: 28/10/2009), para luego a través de una función convertir ese formato de días numéricos por días calendarios (Le resto una unidad a cada elemento de la serie de dias para comenzar a escribir otro arreglo desde la fecha base); este es mi código:

Código PHP:
<?php
    
function SumarFechas($ndias$fechabase) {
        if (
preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9]){2,4}/"$fechabase)) {
            list(
$dia$mes$anno) = split("/"$fechabase);
        }
        if (
preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9]){2,4}/"$fechabase)) {
            list(
$dia$mes$anno) = split("-"$fechabase);
        }
        
$nueva mktime(000$mes$dia$anno) + $ndias 24 60 60;
        
$nuevafecha date("d/m/Y"$nueva);
        
        return 
$nuevafecha;
    }
    
    for (
$i 1$i 9$i++) {
        
$arreglo_dias[] = $i;
    }
?>
<pre><?php print_r($arreglo_dias); ?></pre>
<?php
    $fechabase 
"28/10/2009";
    
$arreglo_fechas = array();
    
    
$dias array_keys($arreglo_dias);
    foreach (
$dias as $dia) {
        
$arreglo_fechas[$dia] = SumarFechas(($arreglo_dias[$dia] - 1), $fechabase);
    }
?>
<pre><?php print_r($arreglo_fechas); ?></pre>
Para verificarlo, imprimo ambos arreglos, con los días numéricos y los días calendarios, este es el resultado:

Código:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)

Array
(
    [0] => 28/10/2009
    [1] => 29/10/2009
    [2] => 30/10/2009
    [3] => 31/10/2009
    [4] => 01/11/2009
    [5] => 01/11/2009
    [6] => 02/11/2009
    [7] => 03/11/2009
)
El detalle es que en el segundo arreglo (fechas) entre el mes de octubre y noviembre se repite 1 dia (se duplica una fecha), algo que no me ocurre si pongo otra fecha base fuera de esos meses. El codigo parece estar bien, pero veo que ocurre sólo entre estos meses al variar el año, por lo que me resulta extraño. Existe alguna razón para que pase esto?? Estuve buscando algún error parecido por Internet y nada por ahora. Si la hay, me gustaria conocer la explicación. Si tienen otras sugerencias para mejorar y/o corregir el presente código, estaré agradecido y gustoso de recibirlas.
  #2 (permalink)  
Antiguo 16/10/2009, 20:01
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Fecha duplicada en un arreglo de días

Yo no logré reproducir el problema.

Por otro lado, puedes realizar ese típo de operaciones con fechas usando strtotime.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 16/10/2009, 21:38
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Fecha duplicada en un arreglo de días

Hola
Pues yo creo que tu problema es porque no usas en el ejemplo la fecha como date sino como string
Prueba esto
Código PHP:
<?php
    
//$fechabase = "28/10/2009";
    
$fechabase date("d-m-Y",mktime(00010282009));
    
$arreglo_fechas = array();
    
    
$dias array_keys($arreglo_dias);
    foreach (
$dias as $dia) {
        
//$arreglo_fechas[$dia] = SumarFechas(($arreglo_dias[$dia] - 1), $fechabase);
        
$arreglo_fechas[$dia] = date("d/m/Y"strtotime("$fechabase   +$dia day"));
    }
?>
p.d: Dejo en comentarios lo que tu tenías, y solo postee la sección en donde hice cambios, igual si te fijas puedes reducir el codigo haciendo la asignación al array $arreglo_fechas en el for que tienes sin usar el foreach posterior, quedando algo así

Código PHP:
    $fechabase date("d-m-Y",mktime(00010282009));
    for (
$i 1$i 9$i++) {
        
//$arreglo_dias[] = $i;
        
$arreglo_dias[] = date("d/m/Y"strtotime("$fechabase   +$i day"));;
    } 
saludos

Última edición por mortiprogramador; 16/10/2009 a las 21:39 Razón: cambio
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 15:38.