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

[Google Apps Script] 時限設定を隔週にする

More than 1 year has passed since last update.

毎週会議の前の決まった時刻に Google Apps Script の時限設定を使って Slack で定期通知していたところ、別の会議で隔週で通知して欲しいという要望があり、トリガーのオプションに隔週の選択肢がなかったので、スクリプト内でなんとかした話。

この例では年末年始のような休暇時期は考慮していません

UNIX 時間

JavaScript では 1970 年 1 月 1 日 午前 0 時 0 分 0 秒から現在までカウントされている秒数を算出することができます。

console.log(Math.floor((new Date()).getTime()/1000)); 
// 実行時の出力: 1494333017

これを元に UNIX 時間で今現在、何週目かを割り出してみます。

UNIX 週を求める

UNIX 秒からさらに秒(60)、分(60)、時(24)、週(7)で割って、 UNIX 週を割り出します。

var ut = Math.floor((new Date()).getTime()/1000);
var week = ut / 60 / 60 / 24 / 7;
console.log(week);
// 実行時の出力: 2047

2047 が返ってきました。閏年などは考慮していない算出方法ではありますが、一応確認

// 年間の週数で割ってみる
var year = week / 52;
console.log(year);
// 実行時の出力: 47

// 週数の替わりに日数で割ってみる
var year = ut / 60 / 60 / 24 / 365;
console.log(year);
// 実行時の出力: 47 (同じ)

いずれも 47 が返ってくるので 1970 + 47 = 2017 で投稿時の年数と一致しています。

奇数と偶数を判別して実行する

やや、厳密ではないかもしれませんが、単に週数を求められればいいのでこの週数を元にして Google Apps Script に組み込んで参ります。

postMessage.gs
// 関数は毎週実行される
function biweeklyPost() {
  var utw = Math.floor((new Date()).getTime() / 1000 / 60 / 60 / 24 / 7);
  var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
  var slackApp = SlackApp.create(token);
  var props = {
    channel: "#channel",
    message: "<!channel|channel> 明日は、○○ MTGがありますので、○○ の入力お願いします。",
    userName: "bot"
  }
  // 奇数と偶数を判別し、以下の例では奇数の週だけ Slack 側に通知を行う。
  if(utw % 2 == 1) { 
    slackApp.postMessage(props.channel, props.message, {
      username:props.userName
    });
  }
}

これで biweeklyPost() 自体は毎週実行されますが、 postMessage() は実行されないので、隔週の通知が可能になりました。もっといい方法がきっとあるはずですが、この方法でしばらく様子を見てみます。

参考リンク

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
ユーザーは見つかりませんでした