Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Arbeitsstunden berechnen?

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sideshow
•-->
•-->


Anmeldedatum: 07.05.2002
Beiträge: 130

BeitragVerfasst am: 05.07.2002 - 08:38    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

Morgen,

ich hab mal wieder ein Problem. Es ist aber nicht wirklich ein Script-Problem, sondern ein Denkproblem! Ich möchte einfach die vergangenen Stunden und Minuten zwischen zwei Uhrzeiten berechnen. Bei einer Uhrzeit wie: 15 Uhr und 18 Uhr ist das ja kein Problem, aber wie schauts aus bei 08.34 Uhr und 19.47 Uhr? Wie würdet ihr das lösen?

Dankbar für jede Hilfe!!!!
_________________
Meine Wenigkeit im Internet: http://www.sideshow-systems.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Folker
•---->
•---->


Anmeldedatum: 11.12.2000
Beiträge: 649
Wohnort: Holsteinische Schweiz

BeitragVerfasst am: 05.07.2002 - 09:32    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

Moin,

den Lösungsansatz hatten wir schon vor kurzem in einem Thread hier (Zeit aus Datum auslesen)
Du errechnest erstmal die Sekunden jedes Zeitwertes, bildest die Differenz und rechnest zurück - voila

property theSep : {":"}

set x to get_Sec("1:33:06")
set y to get_Sec("3:07:09")
set thedif to y - x
set thedif to get_difTime(thedif)

on get_Sec(theTime)
set {old_Delim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theSep}
set theTime to text items of theTime
set theSec to (((item 1 of theTime) as real) * (60 ^ 2)) + (((item 2 of theTime) as real) * 60)
if length of theTime > 2 then
set theSec to theSec + ((item 3 of theTime) as real)
end if
set AppleScript's text item delimiters to old_Delim
return theSec
end get_Sec

on get_difTime(thedif)
set h to ((thedif div (60 ^ 2)) as integer) as string
set m to text -1 thru -2 of ("00" & (((thedif div 60) mod 60) as integer) as string)
set s to text -1 thru -2 of ("00" & ((thedif mod 60) as integer) as string)
set {old_Delim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theSep}
set thedif to {h, m, s} as string
set AppleScript's text item delimiters to old_Delim
return thedif
end get_difTime

Gruß,
Folker

Fehler wurde im Script korrigiert!


(Geändert von Folker um 9:43 Uhr am 5 Juli 2002)
_________________
Gruß,
Folker Brandt
=============================
Systemberatung · Datenbanken · Webdesign
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
sideshow
•-->
•-->


Anmeldedatum: 07.05.2002
Beiträge: 130

BeitragVerfasst am: 05.07.2002 - 09:41    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

Hi Folker,

ich versteh zwar in keinster Weise das Script (noch nicht), aber es funktioniert echt richtig gut! Hat mir sehr weitergeholfen!!!
Danke nochmal!
_________________
Meine Wenigkeit im Internet: http://www.sideshow-systems.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Folker
•---->
•---->


Anmeldedatum: 11.12.2000
Beiträge: 649
Wohnort: Holsteinische Schweiz

BeitragVerfasst am: 05.07.2002 - 09:42    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

STOP!!! Da ist ein dummer Fehler drin! Es muss in den Zeilen
if length of theTime > 2 then
set theSec to theSec + ((item 3 of theTime) as integer)
end if
--item 3 drinstehen, war eine verunglückte Kopieraktion!
_________________
Gruß,
Folker Brandt
=============================
Systemberatung · Datenbanken · Webdesign
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Folker
•---->
•---->


Anmeldedatum: 11.12.2000
Beiträge: 649
Wohnort: Holsteinische Schweiz

BeitragVerfasst am: 05.07.2002 - 10:00    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

Ja gut, dann will ich doch auch ein bißchen dazu kommentieren.

property theSep : {":"} -- ist eigentlich klar, manche Leute verwenden einen einfachen Punkt um die einzelnen Teile der Zeitangabe zu trennen - so muss man sich immer nur um den Property kümmern.

set x to get_Sec("1:33:06")
set y to get_Sec("3:07:09")
-- x ist Startzeit, y Endzeit, ist eigentlich auch klar. Über den Handler 'get_Sec(Wert)' besorgen wir uns die Sekundenwerte dieser Zeiten.

on get_Sec(theTime)
--als erstes splitten wir den Text theTime in die einzelnen Werte Stunde, Minuten, Sekunden
set {old_Delim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theSep}
set theTime to text items of theTime
--result: Liste {Stunden, Minuten, Sekunden (optional)}
set theSec to (((item 1 of theTime) as integer) * (60 ^ 2)) + (((item 2 of theTime) as integer) * 60)
-- Ja 1 Stunde = 3600 sec (oder 60 "hoch2" oder zu Quadrat)
if length of theTime > 2 then
-- wenn Zeitwerte mit Sekunden angegeben wurden, hat die Liste 3 items, also mehr als 2, wir addieren noch die Sekunden dazu
set theSec to theSec + ((item 3 of theTime) as integer)
end if
set AppleScript's text item delimiters to old_Delim
-- alte AppleScript's text item delimiters wiederherstellen und das Ergebnis zurückliefern
return theSec
end get_Sec


set thedif to y - x
-- ist simpel, wir bilden die Differenz  (Endwert - Startwert)

set thedif to get_difTime(thedif)
-- Wir wollen einen Zeitwert zurück erhalten und keine Sekunden. Dazu benutzen wir den Handler get_difTime(Sekundenzahl)


on get_difTime(thedif)
-- Volle Stunden erhalten: Sekunden div 60 hoch2 (div lifert nur Ganzzahlwerte zurück)
set h to ((thedif div (60 ^ 2)) as integer) as string
--Minuten erhalten: (Sekunden div 60) mod 60 (Der Operator Modulo liefert den Rest zurück
set m to text -1 thru -2 of ("00" & (((thedif div 60) mod 60) as integer) as string)
--Sekunden: siehe Minutenrechnung, Erklärung Modulo
--Damit wir führende Nullen erhalten, bilden wir aus den Zahlenwerten einen String mit "00" davor und lassen uns nur die letzten beiden Zeichen zurückgeben
set s to text -1 thru -2 of ("00" & ((thedif mod 60) as integer) as string)
set {old_Delim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theSep}
-- Hier basteln wir uns aus den einzelnen "Worten" Stunden, Minuten, und Sekunden ein einziges Wort mit dem entsprechenden Zeit-Separator (":"). Das geht natürlich auch anders aber viele Wege führenÖ
set thedif to {h, m, s} as string
set AppleScript's text item delimiters to old_Delim
return thedif
end get_difTime

Ja, das wars schon.
_________________
Gruß,
Folker Brandt
=============================
Systemberatung · Datenbanken · Webdesign
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
sideshow
•-->
•-->


Anmeldedatum: 07.05.2002
Beiträge: 130

BeitragVerfasst am: 05.07.2002 - 10:04    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

Danke für die ausführliche Erklärung! Des meiste kapier ich ja, ich hab nur meine Probleme mit z.B. sowas hier:

set theSec to (((item 1 of theTime) as integer) * (60 ^ 2)) + (((item 2 of theTime) as integer) * 60)

oder mit sowas:
set {old_Delim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theSep}

aber irgendwie bekomm ich des schon gebacken! Danke nochmal!
_________________
Meine Wenigkeit im Internet: http://www.sideshow-systems.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Folker
•---->
•---->


Anmeldedatum: 11.12.2000
Beiträge: 649
Wohnort: Holsteinische Schweiz

BeitragVerfasst am: 05.07.2002 - 10:20    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

oder mit sowas:
set {old_Delim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theSep}
Ich bin schreibfaul! Das hätte man auch so schreiben können:
set alter_Delimiter to AppleScript's text item delimiters -- den alten-Delimiter brauchen wir um den AS TID auf den alten Wert zurückzusetzen
set AppleScript's text item delimiters to theSep --(theSep ist der property = {":"}

set theSec to (((item 1 of theTime) as integer) * (60 ^ 2)) + (((item 2 of theTime) as integer) * 60)

item x of theTime ist ein string, deshalb (item x of theTime) as integer, in dem Beispiel wollen wir ihn mit 3600 multiplizieren (die Stunden soz. "sekundarisiren Wink), also * (60^2), [60 zum Quadrat] - das waren die Stunden, nun wollen wir ja noch die Minuten dazuaddieren, natürlich als Sekunden, also wieder string zu integer, mit 60 multiplizieren.
Das hätte man auch in mehr Zeilen und damit übersichtlicher machen können. Aber viel in eine Zeile ist halt eine Angewohnheit von mir. Stammt wohl noch aus den Tagen der 32 k Begrenzung und mit der Zeit wachsen die eigenen Scriptversuche doch erheblich.
Äh, also ich finde es natürlich übersichtlicher wenn es wenig Zeilen sind, vor allem bei langen Scripts Ö

Gruß,
Folker
_________________
Gruß,
Folker Brandt
=============================
Systemberatung · Datenbanken · Webdesign
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
sideshow
•-->
•-->


Anmeldedatum: 07.05.2002
Beiträge: 130

BeitragVerfasst am: 05.07.2002 - 10:26    Titel: Arbeitsstunden berechnen? Antworten mit Zitat

jo, da haste recht (mit den wenigen zeilen und übersichtlich usw.), aber für einen Änfänger wie ich es bin ist des nich gerade einfach zu verstehen!

Na ja, ich geb mir Mühe und so langsam blick ich durch!
Danke für die ausführliche Erklärung!
_________________
Meine Wenigkeit im Internet: http://www.sideshow-systems.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter