texto son sheets que numeros numero letras las hojas hoja google funcion definicion convertir caracteristicas calculo javascript google-spreadsheet days hour minute

javascript - son - numeros a letras google sheets



¿Cómo obtengo el número de días para una duración donde el número de horas excede 24 en las hojas de google? (3)

Estoy usando hojas de google donde hay un valor de duración de 69:41:00 donde son 69 horas, 41 minutos, 0 segundos. No parece haber una función para convertir esto a días, horas y minutos, así que hice algunas búsquedas y algunos me sugirieron una función personalizada. No estoy seguro exactamente cómo funciona, pero realicé algunos cambios desde el original para adaptarme a lo que necesitaba. El código a continuación:

/** * Format Duration to Days,Hours,Minutes * * @param {duration} input value. * @return Days,Hours,Minutes. * @customfunction */ function FormatDuration(duration) { // Retrieve the hours and minutes var hrs = duration.getHours(); var days = Math.floor(hrs/24); var hours = hrs % 24; var mins = duration.getMinutes(); // Convert the result to a number to use in calculations var result = days + ''d '' + hours + '' h ''+ mins+'' min''; return result; }

El resultado debería ser 2d 21h 44 min pero en su lugar obtuve 0d 21 h 35 min. ¿Estoy haciendo algo mal aquí?


¿Cómo espera obtener más de 24 horas de un objeto Date ? No es lo mismo que esperabas como Duración. La fecha es para los puntos del calendario, por lo que a lo sumo obtendrías los 23:59:59 de cualquier día. Puede obtener date2 - date1 = milliseconds diff, y trabajar en él, de la siguiente manera;

function FormatDuration(date1, date2) { var milliseconds = date2 - date1; var mins = Math.floor((milliseconds / (1000*60)) % 60); var hours = Math.floor((milliseconds / (1000*60*60)) % 24); var days = Math.floor(milliseconds / (1000*60*60*24)); var result = days + '' d '' + hours + '' h ''+ mins + '' min''; console.log(result); } FormatDuration(new Date(2000, 5, 1, 5, 13, 0, 0), new Date(2000, 5, 2, 15, 31, 0, 0))

Puedes encontrar más detalles aquí


function(durations){ var timeArr = durations.split('':''); //["69","41","00"] //your code }

getHours es un método de objeto Date .

var t = new Date; t.getHours();


Iba a agregar, ¿por qué no utilizas un formato personalizado de

ʺd/d hh/h mm/mʺ ?

Esto funciona bien en Excel pero no en GS porque usa una base diferente para las fechas, por lo que la duración como 69:41:00 se interpretaría como 1/1/1900 21:41 y los días no son correctos. Entonces tendría que dividirlo en días (números enteros) y horas + minutos (fracciones de un día) como este

=text(int(A1),ʺ#0/d ʺ)&text(mod(A1,1),ʺHH/h MM/mʺ)

Puede hacerlo funcionar en Google Scripts si lo desea ajustando la fecha; debería funcionar bien para duraciones de hasta 1 mes.

La razón para agregar 2 a la fecha es que una hora como 03:21:00 (menos de un día) se ve como una fecha: ¡el 30 de diciembre de 1899! Así que le agregué 2 para hacerlo el 1 de enero de 1900. Sin embargo, ahora la parte del día de la fecha es 1 y quiero que sea cero. Así que tengo que restar 1 del día más abajo.

Este extraño comportamiento es probablemente el motivo por el que se te aconseja hacerlo de la otra manera y trabajar en milisegundos, pero solo me interesaba ver si había alguna forma de hacer que el código original funcionara.

/** * Format Duration to Days,Hours,Minutes * * @param {duration} input value. * @return Days,Hours,Minutes. * @customfunction */ function FormatDuration(duration) { // Add 2 days to the date var date=new Date(duration.setDate(duration.getDate()+2)); Logger.log(date.getDate()); var hours = duration.getHours(); // Take 1 off the day part of the date var days = date.getDate()-1; var mins = duration.getMinutes(); // Convert the result to a number to use in calculations var result = days + ''d '' + hours + '' h ''+ mins+'' min''; return result; }