date issue in ical

I am using an applescript to search for a specific all dat event in iCal and then use the date that this event occurs on to focus the script to that date and move/readjust times for events on that date. Having trouble with the date issue when I make a new event.

When I do the following it works fine, but is focused to the current date
set RunDate to date string of (current date)
set startdateTime to {date (RunDate & " 8:30:00 AM")

When I do this it tells me I have a problem with the

if eventname = "Extended Morning Meeting" then
		set RunDate to date string of (start date of ThisEvent)			
		set startdateTime to {date (RunDate & " 8:30:00 AM")

what am I missing?

Hi,

add the keyword get

set RunDate to date string of (get start date of ThisEvent)  

Thanks, although I am still getting an error message of "can’t get date “Tuesday, June 14, 2011 8:30:00 AM” Do I have too many commas? or is it the date vs string date issue? Here is the whole script I am trying to run… can’t get it to paste correctly, sorry

<pre style="<br /> 		font-family: Monaco, 'Courier New', Courier, monospace;<br /> 		font-size: 10px;<br /> 		margin: 0px;<br /> 		padding: 5px;<br /> 		border: 1px solid #000000;<br /> 		width: 720px; height: 340px; <br /> 		color: #000000;<br /> 		background-color: #FFDDFF;<br /> 		overflow: auto;"
title="this text can be pasted into a HTML editor">
tell application "iCal"
set MyEvents to every event of calendar "School Calendar 10-11" where ((start date of it) ≥ (current date))
repeat with ThisEvent in MyEvents
set eventname to summary of ThisEvent
if eventname = "Extended Morning Meeting" then
set RunDate to date string of (get start date of ThisEvent)

set startdateTime to {date (RunDate & " 8:30:00 AM"), date (RunDate & " 9:30:00 AM"), date (RunDate & " 10:30:00 AM"), date (RunDate & " 11:30:00 AM"), date (RunDate & " 12:00:00 PM"), date (RunDate & " 12:30:00 PM"), date (RunDate & " 1:00:00 PM"), date (RunDate & " 1:30:00 PM")}
set enddateTime to {date (RunDate & " 9:25:00 AM"), date (RunDate & " 10:25:00 AM"), date (RunDate & " 11:25:00 AM"), date (RunDate & " 12:25:00 PM"), date (RunDate & " 12:55:00 PM"), date (RunDate & " 1:25:00 PM"), date (RunDate & " 2:25:00 PM"), date (RunDate & " 2:25:00 PM")}

set newstartdateTime to {date (RunDate & " 9:00:00 AM"), date (RunDate & " 9:55:00 AM"), date (RunDate & " 10:50:00 AM"), date (RunDate & " 11:45:00 AM"), date (RunDate & " 12:15:00 PM"), date (RunDate & " 12:40:00 PM"), date (RunDate & " 1:10:00 PM"), date (RunDate & " 1:35:00 PM")}
set newenddateTime to {date (RunDate & " 9:50:00 AM"), date (RunDate & " 10:45:00 AM"), date (RunDate & " 11:40:00 AM"), date (RunDate & " 12:35:00 PM"), date (RunDate & " 1:05:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 2:25:00 PM"), date (RunDate & " 2:25:00 PM")}

set newlab34startdateTime to {date (RunDate & " 9:00:00 AM"), date (RunDate & " 9:55:00 AM"), date (RunDate & " 10:50:00 AM"), date (RunDate & " 11:45:00 AM"), date (RunDate & " 12:15:00 PM"), date (RunDate & " 12:40:00 PM"), date (RunDate & " 1:35:00 PM")}
set newlab34enddateTime to {date (RunDate & " 9:50:00 AM"), date (RunDate & " 10:45:00 AM"), date (RunDate & " 12:10:00 PM"), date (RunDate & " 12:35:00 PM"), date (RunDate & " 1:05:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 2:25:00 PM")}

set newlabbrstartdateTime to {date (RunDate & " 9:00:00 AM"), date (RunDate & " 9:55:00 AM"), date (RunDate & " 10:50:00 AM"), date (RunDate & " 11:45:00 AM"), date (RunDate & " 12:15:00 PM"), date (RunDate & " 12:40:00 PM"), date (RunDate & " 1:35:00 PM")}
set newlabbrenddateTime to {date (RunDate & " 9:50:00 AM"), date (RunDate & " 10:45:00 AM"), date (RunDate & " 12:10:00 PM"), date (RunDate & " 12:35:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 2:25:00 PM")}

tell application "iCal"
set thecalendars to title of every calendar
set calendartotal to count of thecalendars
set timeslottotal to count of startdateTime

repeat with calendarnumber from 1 to calendartotal

set calendarname to item calendarnumber of thecalendars

repeat with timeslotnumber from 1 to timeslottotal
repeat with theEvent in (events of calendar calendarname whose start date = item timeslotnumber of startdateTime)
get theEvent
set theuid to uid of theEvent
set theStartDate to start date of theEvent
set theSummary to summary of theEvent
set theEndDate to end date of theEvent
if summary of theEvent contains "Lab Period 3-4" then
set newEvent to (make new event at end of events of calendar calendarname with properties {start date:(item timeslotnumber of newlab34startdateTime), summary:theSummary, end date:item timeslotnumber of newlab34enddateTime})
delete (every event of calendar calendarname whose uid = theuid)
else
if summary of theEvent contains "Lab Period 4-5" then
set newEvent to (make new event at end of events of calendar calendarname with properties {start date:(item timeslotnumber of newlabbrstartdateTime), summary:theSummary, end date:item timeslotnumber of newlabbrenddateTime})
delete (every event of calendar calendarname whose uid = theuid)
else
set newEvent to (make new event at end of events of calendar calendarname with properties {start date:(item timeslotnumber of newstartdateTime), summary:theSummary, end date:item timeslotnumber of newenddateTime})
delete (every event of calendar calendarname whose uid = theuid)
end if
end if
end repeat
end repeat
end repeat
end tell
end if
end repeat
end tell

just paste the code from Script Editor, then highlight the whole code and press the AppleScript button

tell application "iCal"
	set MyEvents to every event of calendar "School Calendar 10-11" where ((start date of it) ≥ (current date))
	repeat with ThisEvent in MyEvents
		set eventname to summary of ThisEvent
		if eventname = "Extended Morning Meeting" then
			set RunDate to date string of (get start date of ThisEvent)
			
			set startdateTime to {date (RunDate & " 8:30:00 AM"), date (RunDate & " 9:30:00 AM"), date (RunDate & " 10:30:00 AM"), date (RunDate & " 11:30:00 AM"), date (RunDate & " 12:00:00 PM"), date (RunDate & " 12:30:00 PM"), date (RunDate & " 1:00:00 PM"), date (RunDate & " 1:30:00 PM")}
			set enddateTime to {date (RunDate & " 9:25:00 AM"), date (RunDate & " 10:25:00 AM"), date (RunDate & " 11:25:00 AM"), date (RunDate & " 12:25:00 PM"), date (RunDate & " 12:55:00 PM"), date (RunDate & " 1:25:00 PM"), date (RunDate & " 2:25:00 PM"), date (RunDate & " 2:25:00 PM")}
			
			set newstartdateTime to {date (RunDate & " 9:00:00 AM"), date (RunDate & " 9:55:00 AM"), date (RunDate & " 10:50:00 AM"), date (RunDate & " 11:45:00 AM"), date (RunDate & " 12:15:00 PM"), date (RunDate & " 12:40:00 PM"), date (RunDate & " 1:10:00 PM"), date (RunDate & " 1:35:00 PM")}
			set newenddateTime to {date (RunDate & " 9:50:00 AM"), date (RunDate & " 10:45:00 AM"), date (RunDate & " 11:40:00 AM"), date (RunDate & " 12:35:00 PM"), date (RunDate & " 1:05:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 2:25:00 PM"), date (RunDate & " 2:25:00 PM")}
			
			set newlab34startdateTime to {date (RunDate & " 9:00:00 AM"), date (RunDate & " 9:55:00 AM"), date (RunDate & " 10:50:00 AM"), date (RunDate & " 11:45:00 AM"), date (RunDate & " 12:15:00 PM"), date (RunDate & " 12:40:00 PM"), date (RunDate & " 1:35:00 PM")}
			set newlab34enddateTime to {date (RunDate & " 9:50:00 AM"), date (RunDate & " 10:45:00 AM"), date (RunDate & " 12:10:00 PM"), date (RunDate & " 12:35:00 PM"), date (RunDate & " 1:05:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 2:25:00 PM")}
			
			set newlabbrstartdateTime to {date (RunDate & " 9:00:00 AM"), date (RunDate & " 9:55:00 AM"), date (RunDate & " 10:50:00 AM"), date (RunDate & " 11:45:00 AM"), date (RunDate & " 12:15:00 PM"), date (RunDate & " 12:40:00 PM"), date (RunDate & " 1:35:00 PM")}
			set newlabbrenddateTime to {date (RunDate & " 9:50:00 AM"), date (RunDate & " 10:45:00 AM"), date (RunDate & " 12:10:00 PM"), date (RunDate & " 12:35:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 1:30:00 PM"), date (RunDate & " 2:25:00 PM")}
			
			tell application "iCal"
				set thecalendars to title of every calendar
				set calendartotal to count of thecalendars
				set timeslottotal to count of startdateTime
				
				repeat with calendarnumber from 1 to calendartotal
					
					set calendarname to item calendarnumber of thecalendars
					
					repeat with timeslotnumber from 1 to timeslottotal
						repeat with theEvent in (events of calendar calendarname whose start date = item timeslotnumber of startdateTime)
							get theEvent
							set theuid to uid of theEvent
							set theStartDate to start date of theEvent
							set theSummary to summary of theEvent
							set theEndDate to end date of theEvent
							if summary of theEvent contains "Lab Period 3-4" then
								set newEvent to (make new event at end of events of calendar calendarname with properties {start date:(item timeslotnumber of newlab34startdateTime), summary:theSummary, end date:item timeslotnumber of newlab34enddateTime})
								delete (every event of calendar calendarname whose uid = theuid)
							else
								if summary of theEvent contains "Lab Period 4-5" then
									set newEvent to (make new event at end of events of calendar calendarname with properties {start date:(item timeslotnumber of newlabbrstartdateTime), summary:theSummary, end date:item timeslotnumber of newlabbrenddateTime})
									delete (every event of calendar calendarname whose uid = theuid)
								else
									set newEvent to (make new event at end of events of calendar calendarname with properties {start date:(item timeslotnumber of newstartdateTime), summary:theSummary, end date:item timeslotnumber of newenddateTime})
									delete (every event of calendar calendarname whose uid = theuid)
								end if
							end if
						end repeat
					end repeat
				end repeat
			end tell
		end if
	end repeat
end tell

try


.
	if eventname = "Extended Morning Meeting" then
		set startDate to start date of ThisEvent
		set RunDate to date string of startDate
.

hmm, still giving an error, which seems to be due to the {date (RunDate & " 8:30:00 AM"), section. RunDate is a string and I guess when I use the date function it chokes. The strange thing is it works fine if the current date concept is used. Might it be the time issue?

Thanks for the help

dan

Hi.

There’s a terminology clash which prevents ‘date’ + text specifiers from being realised inside iCal ‘tell’ blocks.

Either arrange your ‘tell’ statements so that the affected lines aren’t inside them (best) or put the word ‘my’ in front of each date specifier (should get you through).

tell application "iCal"

	set startdateTime to {my date (RunDate & " 8:30:00 AM"), my date (RunDate & " 9:30:00 AM"), my date (RunDate & " 10:30:00 AM"), my date (RunDate & " 11:30:00 AM"), my date (RunDate & " 12:00:00 PM"), my date (RunDate & " 12:30:00 PM"), my date (RunDate & " 1:00:00 PM"), my date (RunDate & " 1:30:00 PM")}
	
end tell

Thanks!! the my concept worked fine. I’ll work on rearranging the tell statements to see how it works without the my outside of the tell blocks.

dan

Actually, now I’ve woken refreshed, it would be more efficient (for the computer) to use date arithmetic than to get a date string, do a lot of string concatenations, and convert the results back to dates. It would incidentally also avoid the conflict problem ” although tidying up the ‘tell’ blocks would still be a good idea:

tell application "iCal"
	set RunDate to start date of ThisEvent
end tell

set time of RunDate to 0
	
set startdateTime to {RunDate + (8 * hours + 30 * minutes), RunDate + (9 * hours + 30 * minutes), RunDate + (10 * hours + 30 * minutes), RunDate + (11 * hours + 30 * minutes), RunDate + 12 * hours, RunDate + (12 * hours + 30 * minutes), RunDate + 13 * hours, RunDate + (13 * hours + 30 * minutes)}
	
-- etc.

interesting, I had thought about doing that, although I liked the visual set-up of what I came up with better. It is somewhat of a clunky script. I’ll try out what you’ve suggested. My next hurdle is getting this thing to run as an attached script to a subscribed calendar (another thread). The script is coming through now via a good path (had issues) but not running for some reason.

Thanks again,
dan