Mar Mar 14, 2006 1:15 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| Suma de fechas |
|
|
Hola!!
Necesito ayuda quiero realizar el calculo de fechas, por ejemplo por default obtengo la fecha actual pero a esa fecha le quiero sumar 10 dias mas, pero de esos 10 dias a lo mejor se atraviesa sabado y domingo y tambien dias festivos, como puedo calcular la fecha exacta quitando los dias que correpondan a sabado y domingo y dia festivo?? |
|
|
|

Mar Mar 14, 2006 1:57 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4123
Ubicación: Valladolid, España
|
|
|
|
|
El tema es muy dificil...
Quiero decir que con un ejemplo como este:
| Código: |
use Date::Manip;
Date_Init( "Language=Spanish", "DateFormat=non-US" );
$fecha = DateCalc("29/11/2005", "+ 3 dias laborales");
print UnixDate($fecha,"%d/%m/%Y"); |
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. |
|

Mar Mar 14, 2006 2:45 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
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:
| Código: |
*Holiday
9/16 = Día de la Independencia
11/20 = Día de la Revolución Mexicana
third Sunday in Jun = Día del Padre
|
Paso 3
Ya que guardamos el archivo entonces podemos hacer:
| Código: |
use Date::Manip;
Date_Init( "Language=Spanish", "DateFormat=non-US",
"EraseHolidays=1","PersonalCnf=misDiasFestivos.cfg");
$fecha = DateCalc("19/11/2005", "+ 3 dias laborales");
print UnixDate($fecha,"%d/%m/%Y");
|
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 como configurar el Date::Manip puedes checar su manual:
http://search.cpan.org/~sbeck/DateManip-5.44/Manip.pod
SALUDOS |
|

Mar Mar 14, 2006 2:52 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4123
Ubicación: Valladolid, España
|
|
|
|
|
Ya me extrañaba que no se pudiera hacer...
Gracias kidd, por estar alerta  |
|
Vie Mar 17, 2006 11:28 am
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
|
|
|
quisiera saber como edito el error que mencionas del DateManip, e realizado lo que me comentan pero no me quita sabado y domingo
por ejemplo puse como fecha hoy 17/03/2006 y me da como resultado 20/03/2006. |
|
Vie Mar 17, 2006 11:57 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Intenta poner en tu archivo de configuración las siguientes líneas:
| Código: |
every Sunday = Domingo
every Saturday = Sábado
|
Saludos |
|

Sab Mar 18, 2006 6:05 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4123
Ubicación: Valladolid, España
|
|
|
|
|
| kaeri escribió: | quisiera saber como edito el error que mencionas del DateManip, e realizado lo que me comentan pero no me quita sabado 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í:
| Código: |
| } elsif ($tmp=&ParseDateDelta($D |
Cuando la encuentres, justo debajo de ella metes una línea más que sea así:
| Código: |
| $mode = $Curr{"Mode"}; |
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.
| Código: |
use Date::Manip;
Date_Init( "Language=Spanish", "DateFormat=non-US");
$x = DateCalc("29/09/2005","+ 6 dias laborales",\$err);
print $x,"\n",$err; # 2005100708:00:00 |
|
|

Lun Mar 20, 2006 9:48 am
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
|
|
|
Hola
Ya se ha resolvido el problema del calculo quitando sabado y domingos, solamente me queda lo de quitar dias festivos.
Oye kidd quisiera saber si el archivo de configuracion donde declaras los dias festivos es como lo mencionas, pues lo he agregado y no toma el dia festivo, por ejemplo coloque el dia 3/21 = Dia de Natalicio de Benito Juarez, yo tambien soy de México.
Gracias por su tiempo. |
|
Lun Mar 20, 2006 11:41 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
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 |
|
Lun Mar 20, 2006 1:09 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
|
|
|
ok, kidd
El contenido del archivo de configuración lo tengo de esta forma:
| Código: |
*Holiday
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
|
y como lo programo para obtener la fecha lo tengo de esta forma:
| Código: |
use Date::Manip;
Date_Init( "Language=English", "DateFormat=non-US","EraseHolidays=1","PersonalCnf=misDiasFestivos.cfg");
$fecha = DateCalc("17/03/2006", "+ 9 business days ");
$fecha = UnixDate($fecha,"%d/%m/%Y");
|
|
|
Lun Mar 20, 2006 7:13 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Parece que todo está bien, tus fechas las tienes bien puestas, lo que habría de revisar es si tienes el archivo de configuración en el mismo directorio donde se encuentra el módulo.
Saludos |
|
Mie Mar 22, 2006 8:58 am
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
|
|
|
Hola kidd
En este directorio es donde tengo el archivo de configuración
| Código: |
| cd /usr/local/lib/perl5/site_perl/5.8.3/Date/ |
dentro de ese directorio se encuentran los archivos
| Código: |
| Manip.pm Manip.pod misDiasFestivos.cfg |
 |
|
Lun Mar 27, 2006 11:29 am
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
|
|
|
Hola
Necesito ayuda
Quisiera saber si este problema podria resolverse de otra forma, pues no me toma el archivo de los dias festivos, ustedes han hecho algo asi???
kaeri |
|

Lun Mar 27, 2006 12:05 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4123
Ubicación: Valladolid, España
|
|
|
|
|
| kaeri escribió: | Hola kidd
En este directorio es donde tengo el archivo de configuración
| Código: |
| cd /usr/local/lib/perl5/site_perl/5.8.3/Date/ |
dentro de ese directorio se encuentran los archivos
| Código: |
| Manip.pm Manip.pod misDiasFestivos.cfg |
 |
Entonces prueba a poner esto:
| Código: |
Date_Init(
"Language=English",
"DateFormat=non-US",
"EraseHolidays=1",
"PersonalCnf=/usr/local/lib/perl5/site_perl/5.8.3/Date/misDiasFestivos.cfg"
); |
Quizás es que Date::Manip no encuentra el camino al fichero.
Otra opción es:
| Código: |
Date_Init(
"Language=English",
"DateFormat=non-US",
"EraseHolidays=1",
"PersonalCnfPath=/usr/local/lib/perl5/site_perl/5.8.3/Date/",
"PersonalCnf=misDiasFestivos.cfg"
); |
|
|

Mar Mar 28, 2006 1:30 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
|
|
|
Ya he realizado lo que me comentas y no quiere realizar las operaciones, de que otra forma podria hacerlo???
Lo que quiero realizar que apartir de una fecha sumandole 10 dias se quiten los dias festivos, sabados y domingos y al final imprima la fecha correcta.
kaeri  |
|
Powered by phpBB © 2001, 2005 phpBB Group
|