Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Restarle dias a una fecha sin tener encuenta sabados ni domingos

Estas en el tema de Restarle dias a una fecha sin tener encuenta sabados ni domingos en el foro de Visual Basic clásico en Foros del Web. Hola, tengo una fecha dada a la cual se le resta determinado numero de dias hasta ahi todo bien, pero el problema es que necesito ...
  #1 (permalink)  
Antiguo 14/01/2009, 14:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 13
Antigüedad: 15 años, 6 meses
Puntos: 0
De acuerdo Restarle dias a una fecha sin tener encuenta sabados ni domingos

Hola,

tengo una fecha dada a la cual se le resta determinado numero de dias hasta ahi todo bien, pero el problema es que necesito que le reste y que no tenga encuenta ni los sabado ni domingos.

ejem 01/01/2009 - 4 normalmente daria 28/12/2008

como lo necesito es 01/01/2009 - 4 daria 27/12/2008 ya que el 28 es un domingo

alguien sabe?
  #2 (permalink)  
Antiguo 15/01/2009, 06:22
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 2 meses
Puntos: 37
Respuesta: Restarle dias a una fecha sin tener encuenta sabados ni domingos

Cita:
Iniciado por jafl318 Ver Mensaje
Hola,

tengo una fecha dada a la cual se le resta determinado numero de dias hasta ahi todo bien, pero el problema es que necesito que le reste y que no tenga encuenta ni los sabado ni domingos.

ejem 01/01/2009 - 4 normalmente daria 28/12/2008

como lo necesito es 01/01/2009 - 4 daria 27/12/2008 ya que el 28 es un domingo

alguien sabe?
Hola,
en tu ejemplo creo que debería dar 26/12/2008 ya que el 27 es sábado y tampoco lo quieres.

Bueno, mira si te vale este ejemplo:

Código:
Function FechaSinFestivos(ByVal LaFecha As Date, iDias As Integer) As Date
Dim i As Integer, d As Date, n As Long
d = LaFecha
For i = 1 To iDias + 1
    ' si el día de la semana es sábado o domingo, incrementamos el contador 'n'
    If DatePart("w", d) = 7 Or DatePart("w", d) = 1 Then n = n + 1
    ' restamos un día a la fecha
    d = d - 1
Next i
' incrementamos a la variable 'iDias' los sábados y domingos entre las fechas
iDias = iDias + n + 1
' restamos a la fecha los dias indicados + los sábados y domingos
d = LaFecha - iDias
' si la fecha resultante cae en sábado o domingo, restamos (1 día si es sábado, 2 si es domingo)
If DatePart("w", d) = 7 Then
    d = d - 1
ElseIf DatePart("w", d) = 1 Then
    d = d - 2
End If
' retornamos la fecha resultante
FechaSinFestivos = d
End Function
Nota: No he probado la función a fondo, pero creo que puede funcionar.

  #3 (permalink)  
Antiguo 15/01/2009, 09:53
 
Fecha de Ingreso: noviembre-2008
Mensajes: 131
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Restarle dias a una fecha sin tener encuenta sabados ni domingos

Gracias Avellaneda, la verdad no tuve oportunidad de probarlo, pero ya solucione el problema envio mi codigo por si alguien tiene la misma duda.

Gracias.

Private Sub Cmd_Calcular_Click()
Dim fec1, fec2 As String
Dim Dias, Ciudad, x, x1 As String
Dim pos As Integer

'Cliente = Cbo_Cliente.Text
Ciudad = Text_Ciudad.Text

x = Weekday(Text_Reque, 1)

Select Case Ciudad
Case "Bogota"
Dias = 2
Case "Medellin"
Dias = 2
Case "Cali"
Dias = 2
Case "Cartagena"
Dias = 4
Case "Barranquilla"
Dias = 4
End Select

fec1 = Format(Text_Reque, "dd/mm/yyyy")
Text_Progr.Text = fec1
For pos = 1 To Dias
'MsgBox "posicion " & pos
Select Case x
Case 1
'MsgBox "dia inicial " & x
x1 = "Domingo"
fec2 = DateAdd("d", -2, fec1)
'MsgBox "fecha nueva " & fec2
Case 2
x1 = "Lunes"
fec2 = DateAdd("d", -1, fec1)
Case 3
x1 = "Martes"
fec2 = DateAdd("d", -1, fec1)
Case 4
x1 = "Miercoles"
fec2 = DateAdd("d", -1, fec1)
Case 5
x1 = "Jueves"
fec2 = DateAdd("d", -1, fec1)
Case 6
x1 = "Viernes"
fec2 = DateAdd("d", -1, fec1)
Case 7
x1 = "Sabado"
fec2 = DateAdd("d", -1, fec1)
End Select
x = Weekday(fec2)
fec1 = Format(fec2, "dd/mm/yyyy")
'MsgBox "dia nuevo" & x
Next
'fec1 = Format(Text_Reque, "dd/mm/yyyy")
'Text_Progr.Text = fec1
'fec2 = DateAdd("d", -Dias, fec1)
Text_Salida.Text = fec1


End Sub
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:30.