• Publicidad

Quitar días

¿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.

Quitar días

Notapor kaeri » 2006-07-18 12:18 @554

Hola :shock:

Quisiera ayuda acerca de poder quitar días no hábiles entre un rango de fechas, por ejemplo entre 10-Julio-2006 al 18-Julio-2006, yo debo calcular cuantos dias hay de diferencia por default seria 8 días eso si me sale bien pero de 8 días tengo que quitar el sabado y domingo que se atraviesa entre esas fechas a la vez si tambien hubiera un día festivo tambien hay que quitarlo, entonces el total real debe de ser 6 días, ¿cómo podria realizarlo?

Gracias de antemano
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Publicidad

Notapor explorer » 2006-07-18 13:31 @605

¡Respondida!
¡Mas info!

(kaeri tiene muchos problemas con las fechas, ¿eh? :) )
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-07-18 13:43 @613

Si, explorer, aquí me piden mucho la cuestión de fechas.

Ya había checado los temas que pusiste y ya he utilizado el de resta de fechas, pero lo que no sé es cómo utilizar el de quitar días si ahí lo que implica es sumarle días y aquí lo que tengo que hacer es que de un rango de fechas quitar las que sean días inhábiles, ¿¿me entendí??
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Notapor kaeri » 2006-07-18 13:51 @619

Lo que quisiera saber es como calcular cuantos días inhábiles se atravesaron entre un rango de fechas y después teniendo el cálculo restarlo a una fecha y eso desplegarlo en número de días.
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Notapor explorer » 2006-07-18 14:46 @657

Pues la solución estaba entre toda la documentación de Date::Manip:
Código: Seleccionar todo
#!/usr/bin/perl -l

use Date::Manip;

Date_Init(
    "DateFormat=non-US",
    "EraseHolidays=1",
    "PersonalCnf=fiestas.txt"
);
$diferencia = DateCalc("10/07/2006", "18/07/2006", 2);
$dias = Delta_Format($diferencia,1,"%dt");
print $dias; # 5.0
Lo he probado con el siguiente fichero de fiestas:
Código: Seleccionar todo
*Holiday

13/7 = Día de la Comunidad
21/3 = Día Natalicio de Benito Jaurez
16/9 = Día de la Independencia
20/11 = Día de la Revolución Mexicana
third Sunday in Jun = Día del Padre

Explicación:
* Inicializamos Date::Manip con el formato de las fechas a usar (formato no americano de las fechas y que tenga encuenta a las fiestas indicadas en el fichero indicado).
* Hacemos la diferencia y nos devuelve un objeto delta (diferencia entre dos fechas) teniendo en cuenta el modo 'bussines' (2): nada de fiestas y fines de semana.
* La diferencia es pasada a días (%d), y sólo días (t), con un (1) decimal de redondeo.
* Impresión del resultado...
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-07-18 15:17 @678

Gracias por tu aportación explorer

Estuve probando con otras fechas pero me sale mal el resultado

Código: Seleccionar todo
#!/usr/bin/perl -l

use Date::Manip;

Date_Init(
    "DateFormat=non-US",
    "EraseHolidays=1",
    "PersonalCnf=fiestas.txt"
);
$diferencia = DateCalc("05/07/2006", "27/07/2006", 2);
$dias = Delta_Format($diferencia,1,"%dd");
print $dias; # 2.0


Aqui me sale el resultado de 2y no es correcto o si??
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Notapor explorer » 2006-07-18 15:53 @703

Es posible que te esté sacando el número de semanas de diferencia que hay entre las fechas.
* Cambia %dd a %dt, para que sean siempre días
* Es posible que esté influyendo la versión del módulo. Haz un print $Date::Manip::VERSION; para saber la versión. Yo tengo la 5.44, parcheada por mí.
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-07-19 09:30 @438

Gracias explorer creo que ya quedo
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Contar días

Notapor kaeri » 2007-01-10 14:18 @638

Hola

Estoy calculando el número de días quitando dias festivos y dias no hábiles
lo que he estado viendo es que si pongo el rango de 05/12/2006 a 09/01/2007 con el archivo de dias festivos siguiente:

*Holiday

20/11 = Dia 1
1/12 = Dia 2
12/12 = Dia 3
21/12 = Dia 4
22/12 = Dia 5
25/12 = Dia 6
26/12 = Dia 7
27/12 = Dia 8
28/12 = Dia 9
29/12 = Dia 10
2/1 = Dia 11
3/1 = Dia 12
4/1 = Dia 13
5/1 = Dia 14
1/1 = 1 de enero

Me calcula un total de 31 días, lo cual es incorrecto, pues en mi lista de dias inhábiles tengo que desde el 22 de diciembre al 5 de enero son días inhabiles los cuales no me toma en cuenta; viendo mi archivo de dias festivos se presentan el 12/12 y los siguientes del 21/12 al 05/1; estuve probando rangos de fechas y lo que veo es que si se juntan más de 2 días inhabiles sale mal el calculo de días. Ya realice la corrección del error que se comenta, pero de todas formas sale el mismo error.
Avatar de Usuario
kaeri
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2004-08-19 12:05 @545
Ubicación: México

Notapor explorer » 2007-01-10 14:53 @662

Date::Manip es un poco pejiguero con el tema de las fechas. En concreto, todo el tema de los deltas (diferencia entre dos fechas) lo trata de forma distinta si en ese delta existe un componente de mes, que, curiosamente, es lo que te pasa a ti.

Leyendo la documentación de Date::Manip (sí, a veces hay que leerla :-)) en la parte de DateCalc, se comentan los distintos usos del parámetro $mode.

Si $mode=0, el cálculo se hace en días, con lo que te sale para tus fechas 35 días.
Si $mode=1, se hace un cálculo aprox. de años y meses, saliendo 1 mes y 4 días (de diciembre a enero y del día 5 al 9).
Si $mode=2, es cálculo 'bussines' (con fiestas y fines de semana): un mes y un día (un mes desde el 6 de diciembre al 6 de enero más un día para saltar el lúnes 8 de enero).
Si $mode=3, el cálculo es 'bussines' exacto: 12 días.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l

use Date::Manip;

Date_Init(
    "Language=Spanish",
    "DateFormat=non-US",
    "EraseHolidays=1",
    "PersonalCnf=fiestas.txt"
);

# print $Date::Manip::VERSION;

$diferencia = DateCalc("05/12/2006", "09/01/2007",3);
print $diferencia;
$dias = Delta_Format($diferencia,1,"Hay %Mv meses y %dt dias de diferencia");
print "$dias"; # Hay 0 meses y 12.0 dias de diferencia
Coloreado en 0.002 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

Siguiente

Volver a Intermedio

¿Quién está conectado?

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