Página 1 de 4

Suma de fechas

NotaPublicado: 2006-03-14 14:15 @635
por kaeri
¡¡¡Hola!!

Necesito ayuda quiero realizar el cálculo de fechas, por ejemplo por defecto obtengo la fecha actual pero a esa fecha le quiero sumar 10 días más, pero de esos 10 días a lo mejor se atraviesa sábado y domingo y también días festivos. ¿Cómo puedo calcular la fecha exacta quitando los días que correspondan a sábado y domingo y día festivo?

Re: Suma de fechas

NotaPublicado: 2006-03-14 14:57 @664
por explorer
El tema es muy difícil...

Quiero decir que con un ejemplo como este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Date::Manip;
  2. Date_Init( "Language=Spanish", "DateFormat=non-US" );
  3. $fecha = DateCalc("29/11/2005", "+ 3 dias laborales");
  4. print UnixDate($fecha,"%d/%m/%Y");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
debería bastar, pero resulta que 'casi' todos los módulos que gestionan fechas sólo mantienen como laborales los días que van del lunes al viernes. No tienen calendarios de fechas, en parte porque sería necesario tener un calendario por cada país, y actualizarlo cada año.

Más ejemplos.

Ni siquiera he visto esa opción en los módulos DateTime... me temo que tendrás que calcularla 'a mano'. En el FAQ de la web de DateTime hay ejemplos de cómo recorrer un rango de fechas. Puedes entonces preguntar si es sábado, domingo o festivo (si corresponde con alguno de los días festivos que tu antes has definido en el programa).

P.D. Si vas a usar el módulo Date::Manip, no dejes de leer el error y su arreglo.

NotaPublicado: 2006-03-14 15:45 @697
por kidd
Hola.

Puedes usar el módulo Date::Manip como te dice explorer, y el módulo lo puedes configurar para agregar los días festivos que quieres.

Lo podrías hacer de la siguiente manera:


Paso 1

Vamos a crear un nuevo archivo al cual vamos a nombrar misDiasFestivos.cfg el cual lo vamos a poner en el mismo directorio donde se encuentra el archivo Manip.pm de nuestro módulo, es decir en el directorio Date.


Paso 2

Dentro de este archivo vamos a configurar nuestros días festivos, por ejemplo, yo que vivo en México podría poner lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
*Holidays

9/16 = Día de la Independencia
11/20 = Día de la Revolución Mexicana
third Sunday in Jun = Día del Padre
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Paso 3

Ya que guardamos el archivo entonces podemos hacer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Date::Manip;
  2.  
  3. Date_Init( "Language=Spanish", "DateFormat=non-US",
  4.                 "EraseHolidays=1","PersonalCnf=misDiasFestivos.cfg");
  5.  
  6. $fecha = DateCalc("19/11/2005", "+ 3 dias laborales");
  7. print UnixDate($fecha,"%d/%m/%Y");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y listo, ya va a tomar en cuenta los días festivos que pongas en tu archivo de configuración.

Recuerda que solamente se van a tomar en cuenta aquellos días festivos que hayas puesto en tu archivo de configuración, así que deberás de poner todos los que quieras y necesites, por ejemplo, Navidad, Pascua, etc.

Para mayores detalles acerca de cómo configurar el Date::Manip puedes checar su manual:
http://search.cpan.org/~sbeck/DateManip-5.44/Manip.pod


SALUDOS

Re: Suma de fechas

NotaPublicado: 2006-03-14 15:52 @702
por explorer
Ya me extrañaba que no se pudiera hacer...
Gracias, kidd, por estar alerta :)

NotaPublicado: 2006-03-17 12:28 @561
por kaeri
Quisiera saber cómo edito el error que mencionas del Date::Manip. He realizado lo que me comentan pero no me quita sábado y domingo. Por ejemplo puse como fecha hoy, 17/03/2006 y me da como resultado 20/03/2006.

NotaPublicado: 2006-03-18 00:57 @081
por kidd
Intenta poner en tu archivo de configuración las siguientes líneas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
every Sunday = Domingo
every Saturday = Sábado
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Saludos

Re: Suma de fechas

NotaPublicado: 2006-03-18 07:05 @337
por explorer
kaeri escribiste:quisiera saber cómo edito el error que mencionas del Date::Manip. He realizado lo que me comentan pero no me quita sábado y domingo.
Por ejemplo, puse como fecha hoy, 17/03/2006 y me da como resultado 20/03/2006.
Primero buscas en tu ordenador donde está el fichero Date/Manip.pm.

Luego lo abres con un editor de textos, y busca la primera línea que sea así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
} elsif ($tmp=&ParseDateDelta($D
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Cuando la encuentres, justo debajo de ella metes una línea más que sea así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$mode = $Curr{"Mode"};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Esto debes hacerlo una vez más (volver a buscar otra línea igual que la primera y volver a insertar debajo de ella la segunda línea).

Grabas el fichero y sales, y ya está solucionado el problema. Quiero decir que ahora sumará bien las fechas expresadas como laborales.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Date::Manip;
  2. Date_Init( "Language=Spanish", "DateFormat=non-US");
  3. $x = DateCalc("29/09/2005","+ 6 dias laborales",\$err);
  4. print $x,"\n",$err; # 2005100708:00:00
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2006-03-20 10:48 @491
por kaeri
Hola.

Ya se ha resuelto el problema del cálculo quitando sábados y domingos, solamente me queda lo de quitar días festivos.

Oye, kidd, quisiera saber si el archivo de configuración donde declaras los días festivos es como lo mencionas, pues lo he agregado y no toma el día festivo. Por ejemplo, coloqué el día 3/21 = Día de Natalicio de Benito Juarez, yo también soy de México.

Gracias por su tiempo.

NotaPublicado: 2006-03-20 12:41 @570
por kidd
Kaeri, te pido si de ser posible pones el contenido de tu archivo de configuración, así como el código que estás usando.

Saludos

NotaPublicado: 2006-03-20 14:09 @631
por kaeri
Ok, kidd.

El contenido del archivo de configuración lo tengo de esta forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
*Holidays

3/21 = Día Natalicio de Benito Jaurez
9/16 = Día de la Independencia
11/20 = Día de la Revolución Mexicana
third Sunday in Jun = Día del Padre
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y como lo programo para obtener la fecha lo tengo de esta forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Date::Manip;
  2.  
  3. Date_Init( "Language=English", "DateFormat=non-US","EraseHolidays=1","PersonalCnf=misDiasFestivos.cfg");
  4. $fecha = DateCalc("17/03/2006", "+ 9 business days ");
  5. $fecha = UnixDate($fecha,"%d/%m/%Y");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4