0 votes

AppleScript : conversion des décimales en heures / jours

Comment puis-je convertir la valeur sur mon script de décimal à heures / ou jour ?

Pour convertir les décimales en heures, je crois que c'est :

heures + (minutes /60)

mais ma variable est dans ce format :

23.498611111111

D'une manière ou d'une autre, je dois obtenir 23 comme valeur (heures) et la même chose pour les deux décimales après le "." mais je ne suis pas sûr de la manière de procéder.

voici mon script complet :

set myVariableDateHere to "25/03/2019 00:00:00"
set myWantedDate to convertDate(myVariableDateHere)

to convertDate(textDate)
    set resultDate to the current date

    set the day of resultDate to (text 1 thru 2 of textDate)
    set the month of resultDate to (text 4 thru 5 of textDate)
    set the year of resultDate to (text 7 thru 10 of textDate)
    set the time of resultDate to 0

    if (length of textDate) > 10 then
        set the hours of resultDate to (text 12 thru 13 of textDate)
        set the minutes of resultDate to (text 15 thru 16 of textDate)

        if (length of textDate) > 16 then
            set the seconds of resultDate to (text 18 thru 19 of textDate)
        end if
    end if

    return resultDate
end convertDate

set myTimeDifResult to ((current date) - myWantedDate as string)
set daysV to myTimeDifResult / 86400
set hoursV to myTimeDifResult / 60 / 60

set hoursV to roundThis(hoursV, 2) --> -75.54 on roundThis(n, numDecimals) x est égal à 10 ^ numDecimals dire n * x si ((it mod 2) ^ 2 > 0.25) alors retour (it div 0.5 - it div 1) / x retour it div 1 / x end tell fin roundThis

set final to hoursV

if hoursV > 24 then
    set final to (daysV as integer) - 1
end if

return final

mise à jour :

J'ai trouvé comment régler les deux variables :

set the_decimalMin to hoursV mod 1
set the_decimaHours to hoursV div 1

mais maintenant je n'arrive pas à faire le calcul :

set hoursV to the_decimaHours + (the_decimalMin / 60)

erreur :

erreur "Can't make the_decimalMin into type reference" numéro -1700 de MesMinutes en référence

0 votes

Veuillez vous assurer que votre code est indenté correctement - il y a une section de code qui ne fait pas partie du formatage de code au milieu de votre message, ce qui rend le code difficile à suivre.

0 votes

Vous pouvez éviter une grande partie de votre surcomplication en utilisant les maths entières et modulo. Quel type de sortie essayez-vous d'obtenir - jours, heures, minutes ?

0 votes

J'essaye d'obtenir la différence de temps entre deux dates en jours heures et minutes ou heures / minutes seulement concernant le résultat

2voto

red_menace Points 1014

Les constantes AppleScript days , hours et minutes sont respectivement le nombre de secondes d'un jour, d'une heure et d'une minute. Il suffit donc d'effectuer quelques calculs modulo pour obtenir les composants. Par exemple, l'heure serait le nombre mod days div hours la minute serait le nombre mod hours div minutes et les secondes seraient le nombre mod minutes .

Si l'on regroupe tout cela dans quelques gestionnaires d'usage général, on obtiendra quelque chose comme :

set myVariableDateHere to "25/03/2019 00:00:00"
set myWantedDate to convertDate(myVariableDateHere)
log result
set difference to (current date) - myWantedDate
log result
log timeString(difference)
log formatTime(difference)

# Convert date text to an AppleScript date.
# format is DD/MM/YYYY hh:mm:ss (time is optional)
to convertDate(dateText)
  set dateTemplate to (current date)
  tell dateTemplate to set {its day, its month, its year} to words 1 thru 3 of dateText
  set time of dateTemplate to 0
  tell words of dateText to if (count it) > 3 then set time of dateTemplate to (hours * (item 4)) + (minutes * (item 5)) + (item 6)
  return dateTemplate
end convertDate

# Return an elapsed time string from a number of seconds.
on timeString(theSeconds)
  if class of theSeconds is integer then set theSeconds to "" & ¬
    (theSeconds div days) & " days, " & ¬
    (theSeconds mod days div hours) & " hours, " & ¬
    (theSeconds mod hours div minutes) & " minutes, and " & ¬
    (theSeconds mod minutes) & " seconds"
  return theSeconds
end timeString

# Return a formatted time string from a number of seconds.
# format is hh:mm:ss (wraps at 24 hours)
to formatTime(theSeconds)
  if class of theSeconds is integer then tell "0" & ¬
    (10000 * (theSeconds mod days div hours) ¬
      + 100 * (theSeconds mod hours div minutes) ¬
      + (theSeconds mod minutes)) ¬
      to set theSeconds to (text -6 thru -5) & ":" & (text -4 thru -3) & ":" & (text -2 thru -1)
  return theSeconds
end formatTime

0 votes

Wow c'est parfait merci !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X