<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    El 17/02/2013 05:00 p.m., Paola Bruccoleri escribió:
    <blockquote cite="mid:512128BD.2070003@adinet.com.uy" type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=ISO-8859-1">
      El 17/02/2013 04:40 p.m., Paola Bruccoleri escribió:
      <blockquote cite="mid:51212432.4060900@adinet.com.uy" type="cite">Hola

        todos.. <br>
        <br>
        me está d evolviendo mal una comparación cuando se que las
        fechas son <br>
        iguales... <br>
        <br>
        en un form pido mes y año <br>
        <br>
        var <br>
          dFecha, dFechaContrato, dFechaAux: TDate; <br>
          dFechaReaj, dFechaReaj2, dFechaReaj3: TDate; <br>
        <br>
        begin <br>
        ..... <br>
           dFecha:= EncodeDate(StrToInt(edtAnio.Text),
        StrToInt(cboMes.Text), 1); // 1er dia del mes <br>
        <br>
            (el campo finicio es tipo date, Firebird y uso componentes
        Zeos) <br>
            dFechaContrato:=
        qryContratos.FieldByName('finicio').AsDateTime; <br>
            if DayOf(dFechaContrato) = 1 then <br>
              dFechaAux:= dFechaContrato <br>
            else <br>
              dFechaAux:= EndOfTheMonth(dFechaContrato) + 1; <br>
        <br>
            nMeses:= MonthsBetween(dFecha, dFechaAux) + 1;  (sumo 1
        porque sino entre 01/02/12 y 01/02/13 da 11 meses) <br>
        <br>
            if nMeses >= 12 then begin <br>
              nAnios:= Trunc(nMeses/12); <br>
              dFechaReaj:= IncYear(dFechaAux, nAnios); <br>
        <br>
               showmessage(datetostr(dfecha)); <br>
               showmessage(datetostr(dfechareaj)); <br>
        <br>
              if dFecha = dFechaReaj then begin <br>
                    ......... // POR ACA NO PASA Y LAS FECHAS LAS
        MUESTRA IGUAL <br>
        <br>
        <br>
        alguna idea??? <br>
      </blockquote>
      recién descubro que la comparación NO da cuando se hace esta
      cuenta, porque si no se hiciera todo funciona perfectamente. (o
      sea, con los contratos hechos el 1er día del mes)<br>
      <br>
      dFechaAux:= EndOfTheMonth(dFechaContrato) + 1; <br>
      <br>
      o sea, cuando la fecha de contrato no es el 1er día, que debo
      obtener el 1er día del mes siguiente....<br>
      <br>
      si tengo como fecha 20/01/2012, dFechaAux debería ser 01/02/2012,
      le sumo 1 año: 01/02/2013 y no compara con dFecha que es
      01/02/2013<br>
      <br>
      la verdad.. no se porqué falla esa cuenta!<br>
      <br>
    </blockquote>
    en cambio así funciona bien:<br>
    StartOfTheMonth(IncMonth(dFechaContrato, 1));<br>
    <br>
    claro... usé la función datetimetostr() y veo que:<br>
    <br>
    EndOfTheMonth(dFechaContrato) + 1; devuelve 01/02/2012 23:59:59<br>
    y<br>
    StartOfTheMonth(IncMonth(dFechaContrato, 1)); devuelve 01/02/2012<br>
    <br>
    por eso la comparación falla con los siguientes cálculos al sumar 1
    año, etc.<br>
    <br>
    aunque ambas funciones devuelven TDateTime..<br>
    <br>
    por el hábito de sumar 1 a una fecha dada ya que funciona en otros
    lenguajes, es que lo hice aquí. Ahora deberé revisar otras cuentas
    por las dudas<br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
  </body>
</html>