temps de début mais il calcule de mauvais résultats pendant des heures. Étonnamment!
Souhaitez-vous partager une suggestion pour calculer les résultats attendus? P> p> "08:58" code>, heure de fin "17:37" code>. Le résultat attendu est de 8,39 signifiant une durée écoulée de 8 heures et 39 minutes. J'ai essayé ceci:
6 Réponses :
alternativement - étant donné que les temps sont stockés comme fractions décimales d'une journée
Retourne 8.65 à la place 8.39.
Essayez ceci:
Sub Test()
Dim minutes As Long
Dim d1 As Date, d2 As Date
d1 = "2018-01-01 08:58:00"
d2 = "2018-01-01 17:37:00"
minutes = DateDiff("n", d1, d2)
' Will print 8.39
MsgBox Int(minutes / 60) & "." & minutes Mod 60
End Sub
Essayez udf p>
datrodiff code> n'est pas tout à fait nécessaire. Vous pouvez utiliser un simple "moins" pour voir ce qui se passe: ?CDbl(TimeSerial(8,58,0))
0,373611111111111
Eh bien, vous devez également afficher comment obtenir une telle valeur que 0.3736111 code>. Nous pouvons le savoir, mais sans cela, la réponse est incomplète imo.
@ Michałturczyn - vrai, j'ai posté un moyen de l'obtenir.
Function UDF_datediff(d1 As Date, d2 As Date) As Double
Dim difference AS Double
difference = d2 - d1
UDF_datediff = Sgn(difference) * CDbl(Format(difference , "hh.mm"))
End Function
In your example, d2 - d1 is a DateTime of 1899-12-30 08:37:00 - Format this as Hours (2 digits), decimal point, Minutes (2 digits), then convert to a double and correct the sign.
Aimez cette réponse pour la simplicité. Merci à tous, pour avoir présenté différentes approches.
@ Chronocidal: Que signifie le numéro 8.37 pour un observateur aléatoire? N'est-ce pas 8 + 37/100, non? Bien sûr que vous ne voulez pas dire cela; Pourtant, c'est un nombre! 08:37 Is OK, 8:37 Is va aussi, 8.37 est ... pas tout à fait, et vous devez l'expliquer à quiconque n'est pas familier avec cette "notation". Le commentaire de Dy.lee ci-dessus (avec 8.65) a du sens pour moi, pas celui-ci. En outre, qu'est-ce qu'il arrive, disons, jours si la différence de date / heure est grande? Votre "méthode" supprime tout jour entier de la réponse.
@Gene Le nombre "8.37" signifie "8 heures et 37 minutes" dans le format que l'OP a demandé. Il sont b> pays qui formatent leur temps de cette façon, par ex. Finlande ou Pologne (site Web personnel de OP dans son profil est polonais). Et, si l'entrée est une paire de temps de 24 heures, sans jour i> (à nouveau, comme spécifié par OP), une différence supérieure à 24 heures est impossible. Si les dates sont incluses, utilisez simplement le format (différence, "[HH] .mm") code> pour afficher les heures de plus de 23 ans.
La réponse générale est la suivante: pour vos heures de début et de fin en particulier, cette expression produira le résultat "8:39". P> Si vous besoin d'extraire des heures et des minutes à cet égard, vous pouvez le faire: p> Vous pouvez toujours travailler avec les "chiffres", convertir des décimales, multiplier par 24 et par 60, arrondir ... comme dans p> etc. (C'est un peu plus compliqué avec des minutes) p> p>
Avez-vous déjà cherché ici? Cela a été demandé avant
@Solmike S'il vous plaît suggérer une phrase à Google. J'ai essayé
Site: Stackoverflow.com Intervalle entre Dates VBA CODE> et d'autres variations ou veuillez poster un lien vers duplicache.Eh bien, j'ai cherché "VBA Calculer des dates" et a trouvé celui-ci comme exemple possible, vous devriez penser à des mots-clés ... Stackoverflow. COM / Q / 36302022/4961700
t = datrodiff ("n", d1, d2) / 60: h = int (t): m = (t - h) * 60 code>heures = datrodiff ("h", d1, d2) code>, lequel (dans le même jour) est équivalent àheures = heure (D2) - heure (D1) Code>, AKAheures = 17 - 8 code>8:39 * 24 = 8.65