Mostrando entradas con la etiqueta Fechas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Fechas. Mostrar todas las entradas

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;
        }
    }