Jue Mar 08, 2007 3:27 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| Problema con fechas |
|
|
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 |
|
|
|

Jue Mar 08, 2007 5:06 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
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". |
|

Powered by phpBB © 2001, 2005 phpBB Group
|