Sou iniciante no ScriptCase e gostaria de saber se alguém já desenvolver aplicação de calcule os dias úteis entre determinadas datas, exemplo:
Tenho duas tabelas:
- Feriados Fixo (Id, dia/mês) <> dados 02/02
- Feriados Móvel (Id, dia/mês) <> dados 04/02
dtinicial: 01/02/2016
dtfinal: 05/02/2016
Então retorna-se: 03 dias úteis, já que dia 02/02 e 04/02 são feriado.
Tinha o VB este modulo que calcula, mas no PHP não sei como funciona:
Option Compare Database
Option Explicit
Function ProximaDataUtil(dtDataInicial As Date, intDias As Integer) As Date
'criada por Alexandre Neves e Avelino Sampaio
'em 2012-12-27
'para GContabil
'do fórum MaximoAccess
Dim RstFeriadosFixos As DAO.Recordset
Dim RstFeriadosMoveis As DAO.Recordset
Dim RstRecesso As DAO.Recordset
Static varFF As Variant
Static varFM As Variant
Static varRE As Variant
Dim I%, D%, A%
Static K(3) As Byte
Static booCarregado As Boolean
Dim j As Boolean
j = False
If booCarregado = False Then
'----------------------------
'Abre recordsets
'----------------------------
Set RstFeriadosFixos = CurrentDb.OpenRecordset(“SELECT * FROM tabFeriadosFixos”)
Set RstFeriadosMoveis = CurrentDb.OpenRecordset(“SELECT * FROM tabFeriadosMóveis”)
Set RstRecesso = CurrentDb.OpenRecordset(“SELECT * FROM tabRecesso”)
'------------------------------------------------------------------------
'Movimenta ponteiros dos recordset para realizar a contagem de registros
'------------------------------------------------------------------------
RstFeriadosFixos.MoveLast: RstFeriadosFixos.MoveFirst
RstFeriadosMoveis.MoveLast: RstFeriadosMoveis.MoveFirst
RstRecesso.MoveLast: RstRecesso.MoveFirst
'---------------------------------------------------------------------------------------
'Passa para a variável K a quantidade de registros de cada recordset
'passa para as variáves respectivas (varFF,varFM e verRe) os registros de cada tabela
'---------------------------------------------------------------------------------------
K(0) = RstFeriadosFixos.RecordCount: varFF = RstFeriadosFixos.GetRows(K(0))
K(1) = RstFeriadosMoveis.RecordCount: varFM = RstFeriadosMoveis.GetRows(K(1))
K(2) = RstRecesso.RecordCount: varRE = RstRecesso.GetRows(K(2))
'----------------------------------------------
'Fecha os recordset’s e limpa a memoria
'----------------------------------------------
RstFeriadosFixos.Close
RstFeriadosMoveis.Close
RstRecesso.Close
Set RstFeriadosFixos = Nothing
Set RstFeriadosMoveis = Nothing
Set RstRecesso = Nothing
'----------------------------------------------------------------------------------
'Passando a variável booCarregado para true não será mais carregado os recordset’s
'Os dados serão lidos das variáveis varFF, varFE e VarRE
'Assim evitamos ter que realizar viagens as tabelas do back-end
'----------------------------------------------------------------------------------
booCarregado = True
End If
A = 0
'------------------------------------------------------------------------------
'Soma a data de acordo com o prazo, descontando os dias de recesso, se houver.
'------------------------------------------------------------------------------
Do While Not intDias <= A
dtDataInicial = dtDataInicial + 1
For I = 0 To (K(2) - 1)
Select Case CLng(dtDataInicial)
Case CLng(varRE(2, I)) To CLng(varRE(3, I)): j = True
End Select
Next
A = A + IIf(j = True, 0, 1)
j = False
Loop
'----------------------------------------------
'Ajusta a data final caso caia em um feriado
'----------------------------------------------
For I = 0 To (K(0) - 1)
If varFF(0, I) = Format(dtDataInicial, "d-m") Then dtDataInicial = dtDataInicial + 1
Next
For I = 0 To (K(1) - 1)
If varFM(0, I) = dtDataInicial Then dtDataInicial = dtDataInicial + 1
Next
'----------------------------------------------------
'Ajusta a data final caso caia em um final de semana.
'----------------------------------------------------
dtDataInicial = dtDataInicial + IIf(Weekday(dtDataInicial) = 7, 2, IIf(Weekday(dtDataInicial) = 1, 1, 0))
'------------------------------------------------------------------------------------------
'Ajusta a data final caso caia um feriado na segunda-feira, após ajuste de final de semana
'------------------------------------------------------------------------------------------
For I = 0 To (K(0) - 1)
If varFF(0, I) = Format(dtDataInicial, "d-m") Then dtDataInicial = dtDataInicial + 1
Next
For I = 0 To (K(1) - 1)
If varFM(0, I) = dtDataInicial Then dtDataInicial = dtDataInicial + 1
Next
ProximaDataUtil = dtDataInicial
End Function
Desde já agradeço.
Att.
Gilson