Como obtener fechas quincenales constantes?

Como obtener fechas quincenales constantes?

Postby FranciscoA » Wed Dec 21, 2022 10:56 pm

Saludos. Me explico:
Partiendo de una fecha inicial, se le suma 15 y se obtienen las dos fechas que necesitamos.
EJ
dFecIni := date()
dFecQ2 := dFecIni + 15
nQuincenas := 18

A partir de estas variables, queremos armar un array que contenga, en primer lugar, dos elementos con las fechas descritas.
Luego, segun el numero de quincenas (nQuincenas) iremos agregando los elementos para cada una de ellas, cuyas fechas
deberán siempre comenzar con los mismos dias, es decir, si Day(dFecIni) = 13 y Day(dFecQ2) = 28, todas las quincenas deben
comenzar con esos dias.

Si alguien ya ha desarrollado algo parecido, mucho agradeceré si puede compartir el código.

Esto es lo que he logrado hacer:

Code: Select all  Expand view
#include "FiveWin.ch"

Function Main()
local dFecIni  := date(), n, aArr := {}, nDayAnt := 0
local dFecQ2 := dFecIni + 15
local nQuincenas := 18
local dFecha := dFecIni

aadd( aArr, {1, dFecha} )
aadd( aArr, {2, dFecha + 15 } )

For n := 3 to nQuincenas
   dFecha := AddMonth( dFecha, 30, @nDayAnt )
   aadd( aArr, {n, dFecha} )

   n += 1
   aadd( aArr, {n, dFecha + 15} )
Next

XBROWSER aArr TITLE "FECHAS QUINCENALES CONSTANTES"   SETUP ( oBrw:cHeaders := {"QUINCENAS", "FECHAS"} )

Return aArr


Static Function AddMonth( dDate, nDays, nDayAnt )     //tomada del foro: Maestro Manuel Mercado.
   Local nMonth, nMonths, nDay, nYear, ;
         aDias := { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }

   If ( nDays % 30 ) > 0
      Return dDate + nDays
   EndIf

   nMonths := nDays / 30
   nMonth := Month( dDate ) + nMonths
   nDay := Day( dDate )
   nYear := Year( dDate )

   If nMonth > 12
      nMonth := nMonth - 12
      ++nYear
   EndIf

   If nDayAnt > 0
      nDay := nDayAnt
   EndIf

   nDayAnt := 0

   If nDay > aDias[ nMonth ]

      nDayAnt := nDay

      If nMonth == 2
         If ( ( nYear % 4 ) == 0 ) .and. ( ( ( nYear % 100 ) != 0 ) .or. ;
            ( ( nYear % 400 ) == 0 ) )
            nDay := If( nDay > 29, 29, nDay )
         Else
            nDay := 28
         EndIf
      Else
         nDay := aDias[ nMonth ]
      EndIf

   EndIf
Return CtoD( Str( nDay, 2 ) + "." + StrZero( nMonth, 2) + "." + LTrim( Str( nYear ) ) )

 

Saludos, nuevamente.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como obtener fechas quincenales constantes?

Postby FranciscoA » Wed Dec 21, 2022 11:06 pm

Se me olvidó mencionar que los dias que dan problemas son: 29 (Feb), 30, 31.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como obtener fechas quincenales constantes?

Postby cmsoft » Wed Dec 21, 2022 11:53 pm

Francisco:
Cual sería la lógica si la fecha no es válida?
Por ejemplo, si empiezas el 16/01/2022, la segunda quincena sería 31/01/2022 pero esos dos dias ya no serían válidos para todos los meses que tienen menos de 31 días.
Que desearías obtener para la segunda quincena? 16/02/2022 y 03/03/2022 o 16/02/2022 y 28/02/2022?
No se si soy claro con la pregunta
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Como obtener fechas quincenales constantes?

Postby FranciscoA » Thu Dec 22, 2022 12:26 am

cmsoft wrote:Francisco:
Que desearías obtener para la segunda quincena? 16/02/2022 y 03/03/2022 o 16/02/2022 y 28/02/2022?


Fuiste muy claro!
16/02/2022 y 28/02/2022
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como obtener fechas quincenales constantes?

Postby leandro » Thu Dec 22, 2022 2:59 am

Utilizando esta logica, logramos el efecto que nosotros queríamos, no se si pueda servirte.

Image

Code: Select all  Expand view
     
        //si es quincenal
    nMese := round((::hEncabezado["numero_cuotas"]/2),0)
    FOR i:=1 TO nMese
        AADD(aTempo,AddMonth( ::hEncabezado["primera_cuota"] , i ) )
    NEXT
    AADD(aFechas,::hEncabezado["primera_cuota"])
    FOR i:=1 TO len(aTempo)
        dFech := aTempo[i]
        dFec2 := dFech - 15
        AADD(aFechas,dFec2)
        AADD(aFechas,dFech)
    NEXT
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Como obtener fechas quincenales constantes?

Postby FranciscoA » Thu Dec 22, 2022 3:25 pm

Cesar, Leandro. Gracias por contestar.

Leandro, parece ser lo que busco. Pruebo y comento.
Gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como obtener fechas quincenales constantes?

Postby FranciscoA » Thu Dec 22, 2022 4:41 pm

Leandro:
Es lo que buscaba.
Muchas gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como obtener fechas quincenales constantes?

Postby leandro » Thu Dec 22, 2022 5:04 pm

De nada Francisco es un gusto poder ayudar :D
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 54 guests