• Publicidad

Suma de fechas

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Suma de fechas

Notapor kaeri » 2006-03-14 14:15 @635

¡¡¡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?
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Publicidad

Re: Suma de fechas

Notapor explorer » 2006-03-14 14:57 @664

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2006-03-14 15:45 @697

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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Suma de fechas

Notapor explorer » 2006-03-14 15:52 @702

Ya me extrañaba que no se pudiera hacer...
Gracias, kidd, por estar alerta :)
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kaeri » 2006-03-17 12:28 @561

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.
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Notapor kidd » 2006-03-18 00:57 @081

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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Suma de fechas

Notapor explorer » 2006-03-18 07:05 @337

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
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kaeri » 2006-03-20 10:48 @491

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.
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Notapor kidd » 2006-03-20 12:41 @570

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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor kaeri » 2006-03-20 14:09 @631

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
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados