• Publicidad

Problema con 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.

Problema con fechas

Notapor kaeri » 2007-03-08 16:27 @727

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: Seleccionar todo
*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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
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//;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


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

Publicidad

Notapor explorer » 2007-03-08 18:06 @795

Pues yo veo que funciona bien...

Con el siguiente programa me sale esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

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


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado