¿Cómo calcular el número de días laborables?Hola comunidad
Necesito tu ayuda y consejo una vez más. Como nuevo usuario, estoy luchando por aprender.
Tengo una tabla de datos con fecha de inicio y fecha de finalización. Me gustaría calcular el número de días laborables entre la fecha de inicio y la de finalización. ¿Cuál es la mejor manera de hacerlo en JMP? Mi idea es agregar una columna y hacer una fórmula, por ejemplo Diferencia de fecha Pero no estoy seguro de cuál sería la mejor opción.
por favor vea el ejemplo adjunto

Gracias
Martín
AnalíticaTabla de datosRe: ¿Cómo calcular el número de días laborables?Lo primero que debe hacer es definir "jornada laboral". ¿Es todos los días de la semana (de lunes a viernes)? ¿Qué pasa con los feriados bancarios / gubernamentales? ¿Vacaciones religiosas?
Re: ¿Cómo calcular el número de días laborables?Otras preguntas también: las fechas de JMP siempre incluyen una hora, a menudo establecida en cero segundos después de la medianoche. Pero si el rango es del mediodía del lunes al mediodía del lunes 7 días después, ¿cómo quiere contar los dos medio lunes? O incluso si es medianoche al comienzo del lunes, ¿deben contarse ambos?
Contar los días puede no ser una mala elección si sus rangos son pequeños y no demasiados (a continuación, se muestra un código mal probado):
// define an expression that answers the question
includeThisDate = Expr(
2/*monday*/<= Day Of Week( date ) <= 6/*friday*/
);
// brute force counting:
countSelectedDaysInRange = Function( {firstDate, lastDate, testexpr},
{date, count},
If( lastDate < firstDate,
Throw( "dates reversed" )
);
count = 0;
For( date = firstDate, date <= lastDate, date += In Days( 1 ),
count += (testexpr != 0)
);
count;
);
Show( 262 == countSelectedDaysInRange( 1jan2020, 31dec2020, Name Expr( includeThisDate ) ) );
Show( 104 == countSelectedDaysInRange( 1jan2020, 31dec2020, Expr( !(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/) ) ) );
Show( 366 == countSelectedDaysInRange( 1jan2020, 31dec2020, 1 ) );// 2020 is leap year
Show( 0 == countSelectedDaysInRange( 1jan2020, 31dec2020, 0 ) );// no days counted 262 == countSelectedDaysInRange (01Jan2020, 31Dec2020, Name Expr (includeThisDate)) = 1;
104 == countSelectedDaysInRange (01Jan2020, 31Dec2020, Expr (! (2 <= Día de la semana (fecha) <= 6))) = 1;
366 == countSelectedDaysInRange (01Jan2020, 31Dec2020, 1) = 1;
0 == countSelectedDaysInRange (01Jan2020, 31Dec2020, 0) = 1;
El código anterior incluye el último día (<= lastdate en lugar de
Por dolorosa experiencia, sé que trabajar con fechas y horas es difícil de acertar.
Utilice las funciones integradas tanto como sea posible.
Comente el código para quien lo mantenga a continuación.
¡Prueba tu código con cuidado!
Además, si solo necesita una aproximación burda,
(1jan2021-1jan2020) / indays (1) * 5/7 == 261.428571428571
que está cerca de la cuenta 262.
editar: diferencia de fecha (1jan2020,1jan2021, "día") * 5/7 podría parecer más simple para la respuesta cruda
Re: ¿Cómo calcular el número de días laborables?Sí, los días laborables son todos los días de la semana (de lunes a viernes). Sería mejor si también pudiera ajustarme a los días festivos locales.
¿alguna sugerencia?
Re: ¿Cómo calcular el número de días laborables?La solución simple sería extender la expresión de prueba.
// define an expression that answers the question
holidays = associativearray({1jan2020,25dec2020});
includeThisDate = Expr(
(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/)
&
!(holidays<<CONTAINS></CONTAINS>Año Nuevo y Navidad caen entre semana en 2020, por lo que 260 en lugar de 262. Deberá actualizar la matriz asociativa en el futuro y es posible que también necesite datos históricos. Algunos días festivos no caen el mismo día todos los años. Qué problema tan feo, que lleva a ...
Una solución complicada podría usar algo como https://www.abstractapi.com/holidays-api
(Crédito a @Jeff_Perkinson para Cambiar una columna de fecha y hora para producir solo la fecha. )
Re: ¿Cómo calcular el número de días laborables?trabajar con la codificación es nuevo para mí y no parece que funcione. sin embargo, he jugado con algunas de las fórmulas estándar y he encontrado una solución. que sin embargo utilizan días calendario y no días laborables solamente. Para este experimento es suficientemente bueno ya que es lo mismo para comparar.
Re: ¿Cómo calcular el número de días laborables?Para agregar un poco a @Craige_Hales y @Jeff_Perkinson sobre las vacaciones, etc., mencionó pensamientos sobre la contabilización de las "vacaciones locales". Eso se vuelve realmente difícil a menos que adopte una definición estándar de 'local'. Por ejemplo, Canadá tiene un feriado de 'Acción de Gracias', al igual que Estados Unidos. Excepto que es un día diferente en el calendario de Canadá en comparación con Estados Unidos. Y ni siquiera me hagas empezar a nivel de ciudad o estado en los EE. UU. Por ejemplo, en los estados de Maine y Massachusetts, el Día del Patriota es un día festivo que no se celebra en ningún otro lugar de EE. UU. Para hacerlo aún más complicado, algunas empresas cierran ... otras permanecen abiertas. Bancos e instituciones financieras incluidos.
Re: ¿Cómo calcular el número de días laborables?Mi favorito es el viejo Carolina del Norte. vacaciones de béisbol .
Re: ¿Cómo calcular el número de días laborables?Hola @Martinej ,
Hace un tiempo escribí un complemento que calcula el número de días laborables entre dos columnas de fecha. Los días festivos y cualquier otro día específico que desee excluir se solucionan manteniendo un archivo Holiday List.jmp almacenado en su directorio de complementos. Nota: este archivo podría ser cualquier documento (Excel, .txt, .csv, etc.) mantenido en cualquier ubicación accesible por la máquina del usuario de JMP, sin embargo, esto requeriría un pequeño ajuste en el JSL subyacente para proporcionar la ubicación del archivo. De lo contrario, creo que aborda la necesidad solicitada tal como está. Siga las instrucciones para descargar, instalar y editar el archivo de Lista de días festivos: Función NETWORKDAYS
Espero que esto ayude,
alemán
Re: ¿Cómo calcular el número de días laborables?Hola jerry
esto fue realmente útil. Hice mi propia lista y ahora mostraba lo que me gustaría.
Gracias
Martín