Advertisement
Guest User

Untitled

a guest
Oct 24th, 2014
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.20 KB | None | 0 0
  1. function myFunction() {
  2.  
  3. /**
  4. *
  5. * Test function for free times on a room.
  6. *
  7. */
  8.  
  9. function testGetRoomFreeTimes() {
  10.  
  11. var roomId = "riotgames.com_53544c2d4e617574696c7573@resource.calendar.google.com";
  12.  
  13. // Set the date to check for room free time slots
  14. var year = 2014;
  15. var month = 10; // October
  16. var day = 25;
  17.  
  18. freeSlots = getFreeTime(roomId, year, month, day);
  19. Logger.log(freeSlots); // Returns [08:30-10:00, 11:00-14:00, 15:00-16:30]
  20. Logger.log('Number of free slots: ' + freeSlots.length); // Number of free slots: 3
  21.  
  22. var totalSeconds = getTotalTimeRangeInSeconds(freeSlots);
  23. Logger.log('Number of free hours: ' + totalSeconds/3600); // Number of free hours: 6
  24.  
  25. };
  26.  
  27. /**
  28. * Returns Array of strings of Free time ranges for a given room on a given date.
  29. *@param{String} ex: roomId = "username@group.calendar.google.com".
  30. *@param{Nunber} Year of date to look up, ex. 2014.
  31. *@param{Nunber} Month of date to look up, ex. 10 for October.
  32. *@param{Nunber} Day of date to look up, ex. 12.
  33. *@return{Array} Array of free time strings. ex. ["08:30-10:00", "11:00-14:00", "15:00-16:30"].
  34. */
  35.  
  36. function getFreeTime(roomId, year, month, day) {
  37.  
  38. var freeSlots = [];
  39.  
  40. var calendar = CalendarApp.getCalendarById(roomId);
  41.  
  42. // Set the standard start and end times for a room's day
  43. // example start 8:30, end 5:30.
  44. var roomStartHour = 8; // 24 hr time
  45. var roomStartMinute = 30; // 24 hr time
  46. var roomEndHour = 12+5; // 24 hr time
  47. var roomEndMinute = 30; // 24 hr time
  48.  
  49. var theDate = new Date(year,month-1,day); // month is zero based
  50.  
  51. var roomStartTime = new Date(year,month-1,day, roomStartHour, roomStartMinute, 0).getTime()/1000;
  52. var roomEndTime = new Date(year,month-1,day, roomEndHour, roomEndMinute, 0).getTime()/1000;;
  53.  
  54. var lastTime = roomStartTime;
  55.  
  56. var freeStr;
  57.  
  58. var events = CalendarApp.getDefaultCalendar().getEventsForDay(theDate);
  59. Logger.log('Number of events: ' + events.length);
  60.  
  61. for (var i = 0; i < events.length; i++) {
  62.  
  63. var startTime = events[i].getStartTime().getTime()/1000
  64. //Logger.log(getFreeTimeStr(lastTime, startTime));
  65.  
  66. freeStr = getFreeTimeStr(lastTime, startTime);
  67. if (freeStr) freeSlots.push(freeStr);
  68.  
  69.  
  70. lastTime = events[i].getEndTime().getTime()/1000
  71. }
  72.  
  73. //Logger.log(getFreeTimeStr(lastTime, roomEndTime));
  74. freeStr = getFreeTimeStr(lastTime, roomEndTime);
  75. if (freeStr) freeSlots.push(freeStr);
  76.  
  77. return freeSlots;
  78. }
  79.  
  80. /**
  81. * Gets Free time string, or empty string.
  82. *@param{Nunber} Time elements to compare in unix time format.
  83. *@param{Nunber} Time elements to compare in unix time format.
  84. *@return{String} The free time string. ex. 08:00-13:00.
  85. */
  86. function getFreeTimeStr(lastTime, thisTime) {
  87. var date, hours, minutes;
  88. var str = "";
  89.  
  90. if (lastTime < thisTime) {
  91. date = new Date(lastTime*1000);
  92. hours = "0" + date.getHours();
  93. var minutes = "0" + date.getMinutes();
  94. str = hours.substr(hours.length-2)+":"+minutes.substr(minutes.length-2);
  95. str += "-";
  96. date = new Date(thisTime*1000);
  97. hours = "0" + date.getHours();
  98. var minutes = "0" + date.getMinutes();
  99. str += hours.substr(hours.length-2)+":"+minutes.substr(minutes.length-2);
  100. }
  101.  
  102. return str;
  103. };
  104.  
  105. /**
  106. * Goes through the array of time ranges and calculates total time in seconds.
  107. *@param{Array} Array of time ranges as strings. ex. ["08:30-10:00", "11:00-14:00", "15:00-16:30"]
  108. *@return{Number} Total seconds of all ranges.
  109. */
  110. function getTotalTimeRangeInSeconds(freeSlotsArray) {
  111.  
  112. var seconds = 0;
  113.  
  114. for (var i=0; i < freeSlotsArray.length; i++) {
  115. seconds += getTimeRangeInSeconds(freeSlotsArray[i]);
  116. }
  117.  
  118. return seconds;
  119. };
  120.  
  121. /**
  122. * Calculates number of seconds in a time range string.
  123. *@param{String} Expects time range as string of given format. ex. "08:30-10:00".
  124. *@return{Number} Total seconds of this range.
  125. */
  126. function getTimeRangeInSeconds(timeRangeStr) {
  127. var elems, subElems;
  128. var startTime, endTime;
  129. var hours, minutes;
  130.  
  131. elems = timeRangeStr.split("-");
  132. subElems = elems[0].split(":");
  133. hours = subElems[0];
  134. minutes = subElems[1];
  135.  
  136. startTime = ((hours * 60 * 60) + (minutes * 60));
  137.  
  138. subElems = elems[1].split(":");
  139. hours = subElems[0];
  140. minutes = subElems[1];
  141.  
  142. endTime = ((hours * 60 * 60) + (minutes * 60));
  143.  
  144. return(endTime - startTime);
  145.  
  146. };}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement