Sumar días habiles a una fecha.

563 views
Skip to first unread message

Alejandro Garcia G.

unread,
Nov 29, 2014, 9:38:16 AM11/29/14
to publice...@googlegroups.com
Estoy intentando sumar X días a una fecha, el detalle es que no debe incluir los domingos, es decir, si tengo una fecha como: 29/11/2014 y le sumo 15 días,  debe darme la siguiente fecha: 17/12/2014, es decir, no me incluye los 3 domingos que hay entre la fecha original y los 15 días que quiero sumar. ¿Como puedo obtener eso?.

No tengo tabla de dias feriados ni cosas así. Ojala y si alguien sabe como hacerlo que no incluya tablas mejor.

Fidel Charny

unread,
Nov 29, 2014, 9:59:43 AM11/29/14
to publice...@googlegroups.com
Mira Cdow() para saber qué día de la semana es.
Con los feriados, el problema de no querer usar tablas, es que algunos días son arbitrarios. Por ejemplo, los feriados puente turístico se fijan por decreto presidencial.

Fidel Charny

unread,
Nov 29, 2014, 10:23:32 AM11/29/14
to publice...@googlegroups.com
Yo genero un cursor con datos que tengo que modificar, al menos una vez por año para incorporar los puente turístico y algún otro feriado que se le ocurra a los legisladores. Te adjunto el código usado por si te sirve.
Feriados.txt

Alejandro Garcia G.

unread,
Nov 29, 2014, 10:27:52 AM11/29/14
to publice...@googlegroups.com
Gracias Fidel por tus comentarios, voy a revisar de todas formas el archivo que me pasas.

Te comento, como no deseo utilizar tablas (para saber los feriados), solo quisiera que no me sumara los domingos, ya que en todos lados (creo yo) ese día es feriado. La idea es sumar los X días a una fecha cualquiera pero que no me sume los días domingos.

Víctor Hugo Espínola Domínguez

unread,
Nov 29, 2014, 11:22:13 AM11/29/14
to publice...@googlegroups.com
Hola Alejandro

Prueba esta función:

lnSumarDias    = 15            && Negativo para calcular fecha anterior
ldFecha            = Date()

Messagebox(DiasSinDomingo(m.ldFecha, m.lnSumarDias))

Function DiasSinDomingo(tdFecha As Date, tnSumarDias As Integer) As Date

Local ldFecha, lnDiasTmp

ldFecha      = m.tdFecha
lnDiasTmp  = m.tnSumarDias
Do While  m.lnDiasTmp <> 0
       ldFecha = m.ldFecha + Sign(m.tnSumarDias)
       If Dow(m.ldFecha, 1) <> 1
             lnDiasTmp = m.lnDiasTmp - Sign(m.tnSumarDias)
       Endif
Enddo

Return (m.ldFecha)
Endfunc

Saludos,
Víctor.
Lambaré - Paraguay.

Alejandro Garcia G.

unread,
Nov 29, 2014, 11:34:23 AM11/29/14
to publice...@googlegroups.com
Gracias Victor, hasta ahora me esta dando los resultados. Gracias por tu colaboración.

Aunque no es requerido en estos momentos, si voy a implementar algo como lo que Fidel me da en su rutina, crear una tabla con los feriados, domingos, sabados, de cada año para usarlos en los requerimientos que me salgan.

Saludos y gracias.

Luis Maria Guayan

unread,
Nov 29, 2014, 12:40:53 PM11/29/14
to publice...@googlegroups.com
Esta función te puede ayudar:


? SumarDiasSinDomingos(DATE(), 15)

FUNCTION SumarDiasSinDomingos(tdFecha, tnDias)
  ln = 0
  DO WHILE ln < tnDias
    tdFecha = tdFecha + 1
    IF NOT DOW(tdFecha) = 1 && No Domingo
      ln = ln + 1
    ENDIF
  ENDDO
  RETURN tdFecha
ENDFUNC

Luis María Guayán
Tucumán, Argentina
_____________________________
http://comunidadvfp.blogspot.com

El 29/11/2014 a las 11:38, Alejandro Garcia G. escribió:

HernanCano

unread,
Dec 2, 2014, 1:22:35 AM12/2/14
to publice...@googlegroups.com
Esta respuesta va para Fidel (con respecto al comentario que hizo aquí):
¿Ya notaste que es preferible DOW() que CDOW()? ¿Sabes porqué?

Fidel Charny

unread,
Dec 2, 2014, 9:29:23 AM12/2/14
to publice...@googlegroups.com
De acuerdo Hernán. No necesitas ninguna transformación y te independizas del idioma.
Reply all
Reply to author
Forward
0 new messages