Skip to content

Instantly share code, notes, and snippets.

@juanpabloaj
Created June 30, 2012 03:15
Show Gist options
  • Select an option

  • Save juanpabloaj/3022001 to your computer and use it in GitHub Desktop.

Select an option

Save juanpabloaj/3022001 to your computer and use it in GitHub Desktop.
weekly hours in google calendar to spreadsheet
function ymd(date){
return Utilities.formatDate(date,"CLT","yyyy-MM-dd");
}
function calendarsColors(){
var colors = {};
var cals = CalendarApp.getAllOwnedCalendars();
for ( var c = 0 ; c < cals.length ; c++){
colors[cals[c].getName()] = cals[c].getColor();
}
return colors;
}
function countHours(semana) {
var horas = {};
var cals = CalendarApp.getAllOwnedCalendars();
for ( var c = 0 ; c < cals.length ; c++){
var cal = cals[c];
var w = semana;
var events = cal.getEvents(w[0], w[1]);
var total = 0 ;
for ( var i = 0 ; i < events.length ; i++){
var t0 = events[i].getStartTime();
var t1 = events[i].getEndTime();
var name = events[i].getTitle();
// en minutos
var semi = ( t1 -t0 ) / 60000;
total += semi;
}
// en horas
horas[cal.getName()] = total/60;
}
return horas;
}
function week(actual){
// actual = 0 this week;
// actual = 1 next week;
var startDay = 1 ; //0=sunday, 1=monday
var now = new Date;
// desde las 00:00
now = new Date( now.getFullYear(), now.getMonth(), now.getDate());
var today = new Date( now.getTime() + 7 * 86400000 * actual);
var d = today.getDay(); //get the current day
//rewind to start day
var firstday = new Date(today.valueOf() - (d<=0 ? 7-startDay:d-startDay)*86400000);
//add 7 days to get last day, 00:00 of next week
var lastday = new Date(firstday.valueOf() + 7*86400000);
return [firstday,lastday];
}
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [{name:"Calculate hours", functionName: "calculateHours"}];
ss.addMenu("Hours",menuEntries);
}
function calculateHours(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
sheet.clear();
var header = true;
var i=1;
var j=1;
for ( var s = -4 ; s < 4 ; s++){
var range_week = week(s);
var semana = countHours(range_week);
var colors = calendarsColors();
if ( header ) {
for ( var k in semana ){
sheet.getRange(i,j+1).setValue(k);
sheet.getRange(i,j+1).setBackgroundColor(colors[k]);
j++;
}
header = false;
}
j=1;
i++;
for ( var k in semana ){
var date_cell = ymd(range_week[0]) + " - " + ymd(range_week[1]) ;
sheet.getRange(i,1).setValue(date_cell);
sheet.getRange(i,j+1).setValue(semana[k]);
j++;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment