Help us understand the problem. What is going on with this article?

カレンダーから作業時間を計算するスクリプトを作った!

More than 5 years have passed since last update.

これは、Google Apps Script Advent Calendar 2012の10日目の記事です。

フライングしてますが、前から欲しかったので一気に作ってみました。
今回はGoogle Calendarに登録してある予定(実績)から、かかった時間(=作業時間)を
計算するGoogle Apps Scriptを作ってみました。

実際の業務でも「XXX作業、?時間」という報告をすることもあるでしょう。
(えっ?今の時代にそんな事しない?)

そういう報告するためのデータをGoogle Calendarで管理して、勝手にGASで計算して、文面を整えて、メールで上司に飛ばしたら非常に便利だと思います。
ここでは、カレンダーから時間を計測する部分のみを紹介します。

作成したコード

コード.gs
function myFunction() {
  var calendarName = "登録しているカレンダー名";
  var title = "<取得したい作業名>";

  // 今回は敢えて期間は長めに!
  var startTime = new Date("2012/08/01");
  var endTime = new Date("2013/01/01");

  // カレンダーの名前からカレンダーオブジェクトを取得
  // (複数の可能性があるので配列で返るよ!)
  var calendars = CalendarApp.getCalendarsByName(calendarName);
  for(var i = 0; i < calendars.length; i++) {
    // 開始時間と終了時間を指定することで、特定の期間のイベントを全て取得。
    var events = calendars[i].getEvents(startTime, endTime);
    Logger.log("全イベント数 = %s", events.length);

    var allTime = 0;
    var targetCount = 0;
    for(var count = 0; count < events.length; count++) {
      // カレンダーのタイトルでの絞り込みはできないので
      // 全てのイベントのタイトルで比較する。
      if(events[count].getTitle() == title) {
        targetCount++;
        var event_start = events[count].getStartTime();
        var event_end = events[count].getEndTime();

        // 時間の計算はmoment.jsを使えばもう少し楽になるよ!(Google Apps Script Advent Calendar 2012 5日目参照)
        Logger.log("イベント[%s] = %s", events[count].getTitle(), (event_end - event_start));
        allTime += ((event_end - event_start) / 1000);
      }
    }

    // ログに出力せず、Spreadsheetに出力すればもう少し見栄えが良いかも。
    // 今回は作業時間が割り出したかったのでLoggerにしています。
    Logger.log("イベント数 = %s, 全時間 = %s", targetCount, allTime / 3600);
  }
}

レシピ

カレンダーの取得(戻り値は配列
CalendarApp.getCalendarsByName(カレンダー名)
予定の取得(戻り値は配列
Calendar.getEvents(開始時間, 終了時間)
イベントタイトルの取得
CalendarEvent.getTitle()
イベントの開始時間の取得
CalendarEvent.getStartTime()
イベントの終了時間の取得
CalendarEvent.getEndTime()

JavaScriptのDateオブジェクトで差分の計算

実行結果

...たくさんのログ...

イベント数 = 88.0, 全時間 = 191.0

結論

赤字か?!

ttyokoyama
GDG Okayama Organizer たまにGoogle関連の技術の事を投稿しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした