Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problema con fechas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Mar 08, 2007 3:27 pm
kaeri
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
Problema con fechas Responder citando

Nuevamente con problema de fechas.

El problema es que no me cuenta los días adecuadamente, tengo mi archivo de días de asueto que es el siguiente

Código:
*Holiday

1/1 = 1 de enero
20/1 = 20 de enero
5/2 = 5 de febrero
19/3 = 21 de marzo
2/4 = semana santa
3/4 = semana santa
4/4 = semana santa
5/4 = semana santa
6/4 = semana santa
1/5 = 1 de mayo
23/5 = virgen de la luz
16/9 = 16 de septiembre
12/10 = 12 de octubre
2/11 = 2 de noviembre
19/11/2006 = 20 de novimebre
12/12/2006 = 12 de diciembre
25/12 = 25 de diciembre
1/12/2006 = 1 de diciembre
21/12/2006 =asueto
22/12/2006 =asueto
26/12/2006 =asueto
27/12/2006 =asueto
28/12/2006 =asueto
29/12/2006 =asueto
2/1/2007 =asueto
3/1/2007 =asueto
4/1/2007 =asueto
5/1/2007 =asueto


Después tengo esta consulta para obtener la diferencia de días

Perl:
Date_Init( "Language=English", "DateFormat=non-US","EraseHolidays=1","PersonalCnfPath=/usr/local/lib/perl5/site_perl/fiestas.txt");
        $diferencia = DateCalc("17/11/2006", "20/12/2006", 3);
        $dias = Delta_Format($diferencia,1,"%dt");
        $dias =~ s/\.\d//;


Dicho cálculo me da como resultado 21 días los cuales es incorrecto, me debe de dar 20 días sin contar el día 17/11/2006.

Lo que he observado es que cuando aparecen 3 días de asueto seguidos no lo cuenta bien, algo raro está pasando.

Espero puedan ayudarme, gracias
Mensaje Jue Mar 08, 2007 5:06 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Pues yo veo que funciona bien...

Con el siguiente programa me sale esto:
Perl:
#!/usr/bin/perl

use Date::Manip;

Date_Init(
    "Language=English",
    "DateFormat=non-US",
    "EraseHolidays=1",
    "PersonalCnf=fiestas.txt"
);
$diferencia = DateCalc("17/11/2006", "20/12/2006", 3);
$dias = int Delta_Format($diferencia,1,"%dt");
print "$dias\n";

for ( 1 .. 22 ) {
    $diferencia_en_dias  = DateCalc("17/11/2006", "+$_ business days",3);
    $fecha = UnixDate($diferencia_en_dias,"%d/%m/%Y");
    print "+$_ : $fecha\n";
}

Código:
21
+1 : 20/11/2006
+2 : 21/11/2006
+3 : 22/11/2006
+4 : 23/11/2006
+5 : 24/11/2006
+6 : 27/11/2006
+7 : 28/11/2006
+8 : 29/11/2006
+9 : 30/11/2006
+10 : 04/12/2006
+11 : 05/12/2006
+12 : 06/12/2006
+13 : 07/12/2006
+14 : 08/12/2006
+15 : 11/12/2006
+16 : 13/12/2006
+17 : 14/12/2006
+18 : 15/12/2006
+19 : 18/12/2006
+20 : 19/12/2006
+21 : 20/12/2006
+22 : 08/01/2007
Como ves, sale una diferencia de 21 días. Y pintando día a día, vemos que con +21 llegamos al día 20/12/2006.

¿Seguro que el fichero de fiestas está bien? En una línea pone "19/11/2006 = 20 de novimebre".
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group