martes, 28 de junio de 2011

Obtener la diferencia en días, meses y años entre dos fechas.

Un problema frecuente es obtener la diferencia en días, meses y años entre dos fechas, el siguiente método realizado en C# puede brindar una ayuda. este método es la adaptación en español de un trozo de código que ya se encuentra en linea.


    public String DateDifference(DateTime pFechaUno, DateTime pFechaDos)
    {
        try
        {
            int[] vDiasMes = new int[12] { 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

            DateTime vFechaOrigen;
            DateTime vFechaDestino;
            int vAnio;
            int vMes;
            int vDia;
            int vIncremento;

            //Determinamos cual es la fecha menor
            if (pFechaUno > pFechaDos)
            {
                vFechaOrigen = pFechaDos;
                vFechaDestino = pFechaUno;
            }
            else
            {
                vFechaOrigen = pFechaUno;
                vFechaDestino = pFechaDos;
            }

            // Calculamos los dias
            vIncremento = 0;

            if (vFechaOrigen.Day > vFechaDestino.Day)
            {
                vIncremento = vDiasMes[vFechaOrigen.Month - 1];

            }
            if (vIncremento == -1)
            {
                if (DateTime.IsLeapYear(vFechaOrigen.Year))
                {
                    // Para los años bisiestos
                    vIncremento = 29;
                }
                else
                {
                    vIncremento = 28;
                }
            }
            if (vIncremento != 0)
            {
                vDia = (vFechaDestino.Day + vIncremento) - vFechaOrigen.Day;
                vIncremento = 1;
            }
            else
            {
                vDia = vFechaDestino.Day - vFechaOrigen.Day;
            }

            //Calculamos los meses
            if ((vFechaOrigen.Month + vIncremento) > vFechaDestino.Month)
            {
                vMes = (vFechaDestino.Month + 12) - (vFechaOrigen.Month + vIncremento);
                vIncremento = 1;
            }
            else
            {
                vMes = (vFechaDestino.Month) - (vFechaOrigen.Month + vIncremento);
                vIncremento = 0;
            }
            //Calculamos los años
            vAnio = vFechaDestino.Year - (vFechaOrigen.Year + vIncremento);
            return vAnio + " Año(s), " + vMes + " mes(es), " + vDia + " día(s)";
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

3 comentarios:

  1. Este es el único fragmento de código que he encontrado y que explique a la perfección lo que estaba buscando.

    Muchas gracias por compartir.

    ResponderEliminar
  2. Excelente!!! Esto es lo que necesito. Gracias por compartirlo.

    ResponderEliminar
  3. El codigo esta excelente.

    Una inquietud, para llamar esta clase DateDifference , ¿cuales serian los siguientes pasos?

    Responder , por favor.
    Instanciar un objeto?¿

    ResponderEliminar