ASP .NET - Calculando a diferença entre datas


  Hoje veremos como calcular a diferença entre duas datas em uma aplicação Web Forms.

Vamos supor que você deseja calcular a diferença entre duas datas em uma aplicação ASP .NET Web Forms. (Sim legado !!)

Criando o  projeto no VS 2017 Community

Usando o Visual Studio 2017 Community no menu File clique em New Project;

A seguir selecione Visual C# -> Web-> ASP .NET Application(.NET Framework);

Informe um nome a seu gosto. Para o exemplo vou informar WebF_DifDatas;

A seguir escolha o template Empty e marque Web Forms clicando a seguir no botão OK:

Vamos incluir um novo WebForm com o nome Default.aspx no projeto via menu Project -> Add New Item;

Nosso projeto vai usar o controle Calendar Extender do Ajax Control ToolKit.

Para instalar o pacote do Ajax Control ToolKit acesse este link :  http://devexpress.com/act

Após instalar siga as instruções deste artigo para incluir os controles no VS 2017 : ASP .NET AJAX - Usando o controle Calendar Extender.

Agora com os controles instalados vamos definir o código do WebForm na página Default.aspx.

- Inclua na página os controles :

Abaixo o código completo da página Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebF_DifDatas.Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>  
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Calcula a diferença entre Datas</title>
</head>
<body style="background-color:darksalmon "> 
    <form id="form1" runat="server">  
    <asp:ScriptManager ID="ScriptManager1" runat="server">  
    </asp:ScriptManager>  
    <table style="padding: 30px; color: Black; margin-top: 30px">  
        <tr>  
            <td>  
                Data Inicial  
            </td>  
            <td>  
                <asp:TextBox ID="txtDataInicial" runat="server"></asp:TextBox> 
                <asp:CalendarExtender ID="txtDataInicial_CalendarExtender" runat="server" Enabled="True"  
                    TargetControlID="txtDataInicial" Format="dd/MM/yyyy"></asp:CalendarExtender>  
            </td>  
            <td>  
                Data Final  
            </td>  
            <td>  
                <asp:TextBox ID="txtDataFinal" runat="server"></asp:TextBox>  
                <asp:CalendarExtender ID="txtDataFinal_CalendarExtender" runat="server" Enabled="True"  
                    TargetControlID="txtDataFinal" Format="dd/MM/yyyy"></asp:CalendarExtender>  
            </td>  
        </tr>  
    </table>  
    <div style="margin-left: 180px">  
        <asp:Button ID="btncalcular" runat="server" Text="Calcular" OnClick="btncalculate_Click" Height="32px" Width="179px" />  
    </div>  
    <table style="background-color: burlywood; color: Black; padding: 30px; margin-top: 20px;  
        margin-left: 15px" id="tblResultados" runat="server">  
        <tr>  
            <td>  
                Resultado : </td>  
            <td id="tdAno" runat="server">  
            </td>  
        </tr>  
    </table>  
    </form>  
</body>  
</html>

Agora no arquivo code-behind Default.aspx.cs inclua o código abaixo:

using System;
namespace WebF_DifDatas
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //exibe a tabela
            tblResultados.Visible = false;
        }
        protected void btncalculate_Click(object sender, EventArgs e)
        {
            if (txtDataInicial.Text != "" && txtDataFinal.Text != "")
            {
                //armazena as datas
                DateTime dataInicial = Convert.ToDateTime(txtDataInicial.Text);
                DateTime dataFinal = Convert.ToDateTime(txtDataFinal.Text);
                //calcula anos
                int Anos = new DateTime(dataFinal.Subtract(dataInicial).Ticks).Year - 1;
                DateTime AnosTranscorridos = dataInicial.AddYears(Anos);
                //calcula meses
                int Meses = 0;
                for (int i = 1; i <= 12; i++)
                {
                    if (AnosTranscorridos.AddMonths(i) == dataFinal)
                    {
                        Meses = i;
                        break;
                    }
                    else if (AnosTranscorridos.AddMonths(i) >= dataFinal)
                    {
                        Meses = i - 1;
                        break;
                    }
                }
                //calcula dias
                int Dias = dataFinal.Subtract(AnosTranscorridos.AddMonths(Meses)).Days;
                //atribuindo os valores
                tdAno.InnerText = Anos + "  ano(s)  " + Meses + "  mes(es) " + Dias + " dia(s)";
                tblResultados.Visible = true;
            }
        }
    }
}

Agora é só alegria...

Executando o projeto iremos obter o seguinte resultado:

Pegue o projeto aqui :  WebF_DifDatas.zip (sem as referências)

"Porque o Senhor é justo, e ama a justiça; o seu rosto olha para os retos."
Salmos 11:7

Referências:


José Carlos Macoratti