Como calcular anos, meses e dias entre duas datas

Traduções de Artigos Traduções de Artigos
Artigo: 130444 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

O programa neste artigo mostra como calcular a combinação de dias, meses e anos entre duas datas (data de início e data final) passadas como parâmetros de data por exemplo.

NOTA: A data de início tem de ser uma data anterior à data de fim.

Mais Informação

Para executar o programa, guarde o seguinte código como BTWNDATE.PRG. Em seguida, emita o seguinte comando onde Datadeinício e datadefim são valores de data:
DO BTWNDATE.PRG WITH startdate, enddate
				
por exemplo:
DO BTWNDATE WITH {01/05/93},{01/05/95}
				

Exemplo de código

   *
   * BTWNDATE.PRG
   *

   PARAMETERS startdate, enddate
   IF startdate > enddate

        WAIT WINDOW "Start date must " + CHR(13) ;
        + "be earlier than End date"
        RETURN

   ENDIF
   IF PARAMETERS() <> 2

        WAIT WINDOW "Not Correct Number of Parameters"
        RETURN

   ENDIF

   PRIVATE  precmpdate, vyears, vmonths, vdays
   precmpdate={}
   vyears=0
   vmonths=0
   vdays=0
   
   * Calculate:
   *     endofmonth is the last day of month prior to month of enddate
   *
   
   endofmonth = CTOD(ALLTRIM(STR(MONTH(enddate))) + '/' + "01" + '/' + ;
   ALLTRIM(STR(YEAR(enddate)))) - 1
   *
   IF MONTH(startdate) <= MONTH(enddate)

        vyears = YEAR(enddate) - YEAR(startdate)
        IF DAY(startdate) <= DAY(enddate)
             vmonths = MONTH(enddate) - MONTH(startdate)
             vdays = DAY(enddate) - DAY(startdate)
        ELSE
             IF MONTH(startdate) = MONTH(enddate)
                  vyears = vyears - 1
             ENDIF
             vmonths = MOD(MONTH(enddate) - MONTH(startdate) - 1 + 12, 12)
             vdays = endofmonth - precmpdate + DAY(enddate)
        ENDIF

   ELSE

        vyears = YEAR(enddate) - YEAR(startdate) - 1
        IF DAY(startdate) > DAY(enddate)
             vmonths = MONTH(enddate) - MONTH(startdate) + 12 - 1
             vdays = endofmonth - precmpdate + DAY(enddate)
        ELSE
             vmonths = MONTH(enddate) - MONTH(startdate) + 12
             vdays = DAY(enddate) - DAY(startdate)
        ENDIF

   ENDIF
   CLEAR
   WAIT WINDOW  CHR(13) + ;
             '  Years: '  + STR(vyears) + CHR(13) + ;
             ' Months: ' + STR(vmonths) + CHR(13) + ;
             '   Days: ' + STR(vdays) + CHR(13) + ;
             CHR(13) + ;
             ' Between ' + DTOC(startdate) + CHR(13) +;
             '     and ' + DTOC(enddate)

   RETURN
				

Propriedades

Artigo: 130444 - Última revisão: 27 de outubro de 2006 - Revisão: 2.3
A informação contida neste artigo aplica-se a:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft FoxPro 2.5b
  • Microsoft FoxPro 2.5a
  • Microsoft FoxPro 2.5b
  • Microsoft FoxPro 2.6 Standard Edition
  • Microsoft FoxPro 2.6a Standard Edition
  • Microsoft FoxPro 2.5b for MS-DOS
  • Microsoft FoxPro 2.5a
  • Microsoft FoxPro 2.5b for MS-DOS
  • Microsoft FoxPro 2.6 para MS-DOS
  • Microsoft FoxPro 2.6a Standard Edition
Palavras-chave: 
kbmt kbhowto KB130444 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 130444

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com