PHP - DIAS HABILES ENTRE 2 FECHAS

   
Vista:

DIAS HABILES ENTRE 2 FECHAS

Publicado por chavez (23 intervenciones) el 07/08/2008 23:27:52
Quiero calcular los días hábiles entre dos fechas de LUNES a VIERNES sin sabado ni domingo.

tiene alguien algún trozo de código que me pueda prestar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DIAS HABILES ENTRE 2 FECHAS

Publicado por chavez (23 intervenciones) el 08/08/2008 20:26:14
http://www.phpbuilder.com/snippet/download.php?type=snippet&id=1551

he encontrado esto alguien puede explicarme como usarlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DIAS HABILES ENTRE 2 FECHAS

Publicado por Pineapple (183 intervenciones) el 09/08/2008 02:02:10
Hola Amigo mira hay muchas formar pero bueno haber te voy a dar una sencilla oks?

lo mas sencillo que puedeshacer (para mi) es esto:

select * from tu_tabla where DAYNAME(fecha) <> 'Sunday' and DAYNAME(fecha) <> 'Saturday'

Esto lo acabo de hacer porque no estoy en mi lap, entonces ahi lo que haces es seleccionar toda los registros que en su fecha no sean ni Sabado ni Domingo, ahí nadamas tu le pones el between oks?

Espero haberme explicado.

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DIAS HABILES ENTRE 2 FECHAS

Publicado por as (1 intervención) el 13/07/2010 20:27:53
yo tenia el mismo problema y me salio con este codigo espero y te sirva

/*Primeramente declaramos que vamos a crear una funcion, en este caso se llama Dif Dias y recibe dos parámetros, la fecha inicial del período y la final*/

CREATE FUNCTION DifDias(@StartDate DATETIME,@EndDate DATETIME)
RETURNS integer
AS
Begin

//Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas

DECLARE @DaysBetween INT

//Con esta variable acumulamos los dias totales

DECLARE @BusinessDays INT

//esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango

DECLARE @Cnt INT

/*esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo*/

DECLARE @EvalDate DATETIME

/*Esta par de variables sirven para comparar las dos fechas, si son iguales, la funcion nos regresa un 0*/

DECLARE @ini VARCHAR(10)
DECLARE @fin VARCHAR(10)

//Inicializamos algunas variables

SELECT @DaysBetween = 0
SELECT @BusinessDays = 0
SELECT @Cnt=0

//Calculamos cuantos dias normales hay en el rango de fechas

SELECT @DaysBetween = DATEDIFF(DAY,@StartDate,@EndDate) + 1

/*Ordenamos el formato de las fechas para que no importando como se proporcionen se comparen igual*/

SELECT @ini = (SELECT CAST((CAST(datepart(dd,@StartDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@StartDate)AS
VARCHAR(2))+'/'+CAST(datepart(yy,@StartDate)AS VARCHAR(4))) as
varchar(10)))
SELECT @fin = (SELECT CAST((CAST(datepart(dd,@EndDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@EndDate)AS VARCHAR(2))+'/'+
CAST(datepart(yy,@EndDate)AS VARCHAR(4)))as varchar(10)))

//Se comparan las dos fechas

IF @ini <>@fin
BEGIN

/*Si la diferencia de fechas es igual a dos, es porque solo ha transcurrido un dia, asi que solo se valida que no vaya a marcar dias de mas*/

IF @DaysBetween = 2
BEGIN
SELECT @BusinessDays = 1
END
ELSE
BEGIN
WHILE @Cnt < @DaysBetween
BEGIN

/*Se Iguala la fecha a que vamos a calcular para saber si es sabado o domingo en la variable @EvalDate sumandole los dias que marque el contador, el cual no debe ser mayor que el numero total de dias que hay en el rango de fechas*/

SELECT @EvalDate = @StartDate + @Cnt

/*Utilizando la funcion datepart con el parametro dw que calcula que dia de la semana corresponde una fecha determinada, determinados que no sea sabado (7) o domingo (1)*/

IF ((datepart(dw,@EvalDate) <> 1) and
(datepart(dw,@EvalDate) <> 7) )
BEGIN

/*Si no es sabado o domingo, entonces se suma uno al total de dias que queremos desplegar*/

SELECT @BusinessDays = @BusinessDays + 1
END

//Se suma un dia mas al contador

SELECT @Cnt = @Cnt + 1
END
END
END
ELSE
BEGIN

//Si fuese cierto que las fechas eran iguales se despliegue cero

SELECT @BusinessDays = 0
END

//Al finalizar el ciclo, la funcion regresa el numero total de dias

return (@BusinessDays)
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar