Temps moyen et affichage au format spécifique (Coldfusion)

Edit: Merci à barnyr j'ai la moyenne en secondes, alors maintenant je dois juste le convertir au format correct. Malheureusement, les fonctions de Coldfusion notées par Peter ne prennent qu'un object datetime, donc je suis revenu à être perturbé par la conversion.

J'ai une double question. Je dois générer le time moyen nécessaire aux users Y pour effectuer une tâche, puis afficher le résultat dans un format spécifique: x Années x Mois x Semaines x Jours x heures x minutes x secondes.

Ma database principale est SQL Server 2008 et j'exécute les requêtes via Coldfusion 10. Les deux colonnes sont des champs datetime.

La requête est (similaire à):

SELECT Started_Date, Completed_Date FROM tbl_progress WHERE 0=0 

Je dois ensuite parcourir les résultats de la requête, get la différence entre Completed_Date et Started_Date (c'est-à-dire la durée), faire la moyenne des résultats et afficher comme indiqué ci-dessus.

D'un autre thread sur Stackoverflow j'ai obtenu le code suivant, mais cela ne fonctionnera que pour les sections jours / heures / minutes / secondes du format requirejs.

 <cfloop query="complete_time"> <cfset completed = ParseDateTime(complete_time.Completed_Date) /> <cfset started = ParseDateTime(complete_time.Started_Date) /> <cfset difference = (completed - started) /> <cfset fixed_diff = Fix(difference) /> <cfset days = fixed_diff /> <cfset hours = TimeFormat(difference, "H") /> <cfset minutes = TimeFormat(difference, "m") /> <cfset seconds = TimeFormat(difference, "s")/ > </cfloop> 

J'ai besoin de savoir comment / où faire la moyenne, et comment get les valeurs années / mois / semaines pour mon format requirejs. Date maths n'est définitivement pas mon meilleur sujet! Merci.

Je ferais le travail dans la database si vous le pouvez:

 SELECT Started_Date, Completed_Date, DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff FROM tbl_progress 

Vous pouvez ensuite calculer les secondes en minutes, heures, etc. dans ColdFusion.

Lorsque vous travaillez sur les résultats, vous pouvez résumer les valeurs sec_diff . Puis divisez-les par le nombre de lignes dans votre jeu de résultats.

Vous pouvez également faire la moyenne des résultats dans une requête. Jetez un coup d'oeil à la fonction AVG() de SQL.

Je ne suis pas à proximité d'un server SQL, mais vous pouvez utiliser les éléments suivants:

 SELECT Started_Date, Completed_Date, DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff, AVG(DATEDIFF(Second, Started_Date, Completed_Date)) AS average_task_time FROM tbl_progress 

Je suggère d'utiliser la fonction datediff dans le server SQL pour get le nombre de secondes. Alors dans ColdFusion vous n'utilisez pas timeformat, vous faites des maths. Timeformat() prend un object datetime et renvoie une string.