|
Armin's Spot on the Web |
Discussion |
|---|---|
AppleScript: Kalenderwoche berechnen
Note: I usually write articles in English, but this a very specific German problem, so I'll write in German for convenience. Die Regeln für die Kalenderwoche im Deutschen sind überraschend kompliziert. Je nachdem, in welchem Jahr der größere Teil der Woche um Neujahr liegt, gilt die Woche um Neujahr als 53. Woche im alten Jahr oder als 1. Woche des neuen Jahres. Für JavaScript und Excel gibt es zahlreiche fertige Funktionen, die die Kalenderwoche berechnen, aber in AppleScript habe ich keine Implementation gefunden. Hier ist sie: on kalenderwoche(d) copy d to basedate set day of basedate to 4 set month of basedate to January set firstdayoffirstweek to basedate - ((weekdayForDate(basedate) + 5) mod 7) * days set calendarweek to ((d - firstdayoffirstweek) div weeks) + 1 if calendarweek = 53 then set year of basedate to (year of basedate) + 1 set firstdayoffirstweek to basedate - ((weekdayForDate(basedate) + 5) mod 7) * days if firstdayoffirstweek < d then set calendarweek to 1 end if else if calendarweek = 1 then if firstdayoffirstweek > d then set calendarweek to 53 end if end if return calendarweek as integer end kalenderwoche
on weekdayForDate(d) set wd to weekday of d if wd is Sunday then return 1 else if wd is Monday then return 2 else if wd is Tuesday then return 3 else if wd is Wednesday then return 4 else if wd is Thursday then return 5 else if wd is Friday then return 6 else if wd is Saturday then return 7 end if return -1 end weekdayForDate
on run log kalenderwoche(current date) log kalenderwoche(date "Donnerstag, 1. Januar 2004 0:00:00") log kalenderwoche(date "Mittwoch, 31. Dezember 2003 0:00:00") log kalenderwoche(date "Freitag, 31. Dezember 2004 0:00:00") log kalenderwoche(date "Samstag, 1. Januar 2005 0:00:00") end run
Bemerkungen
Kalenderwochen in iCal einfügenDer Kalenderwochen Code oben erlaubt es nun schnell und einfach die Kalenderwochen in iCal anzeigen zu lassen, ersetzen Sie im obigen code den on run
set theYear to year of (current date)
display dialog "Bitte das Jahr dessen Kalenderwochen angezeigt werden sollen, eingeben:" default answer theYear
set theYear to (text returned of result) as number
set theCalName to "Kalenderwochen"
display dialog "Bitte Namen des Kalenders in dem die Kalenderwochen angezeigt werden sollen, eingeben:" default answer theCalName
set theCalName to (text returned of result)
set theDate to date "1.1.2001"
set year of theDate to theYear
tell application "iCal"
set x to count of (every calendar where title is theCalName)
if x = 0 then make new calendar with properties {title:theCalName}
set theCalendar to first calendar where title is theCalName
end tell
-- first day of first week
set d to theDate - ((weekdayForDate(theDate) + 5) mod 7) * days
repeat until year of d > theYear
tell application "iCal"
set kw to my kalenderwoche(d)
set kwstring to "KW " & kw as string
make new event at the end of events of theCalendar with properties {start date:d, summary:kwstring, allday event:true}
end tell
set d to d + 7 * days
end repeat
end run
Dieses Script für das angegebene Jahr an jedem Montag ein Ganztagesereignis mit der Kalenderwoche einfügen. Falls kein Kalender mit dem angegebenen Namen existiert, wird ein neuer erstellt. Wenn Sie die Kalenderwochen in einem eigenen Kalender führen, können sie einfach ein- und ausgeblendet werden. |
|
This page was last updated: Saturday, May 15, 2004 at 5:33:47 PM Copyright 2010 RSVP - Please Reply Mail me @ arminbatmacdotcom |
|