Edited at

Googleカレンダーに月齢を表示する


満月だとそわそわすること、ありませんか

満月だとなんだかそわそわする。

新月だとふさぎ込む。

そんな経験ありませんか?

予め月齢を知りたくありませんか??


Googleカレンダーに月齢を表示してみよう

Googleカレンダーの設定から

カレンダー設定→カレンダー→おすすめのカレンダー→その他を選択すると……

スクリーンショット 2017-04-13 13.26.09のコピー.png

便利なものがあるじゃないの!!

だが待てしかし。

スマホアプリ版では表示されないのです。


シン・Googleカレンダーに月齢を表示

GoogleAppsScriptで実装。

毎月10日に来月のカレンダーに月齢(月の名前)を終日イベントとして作成します。


手順


カレンダーの取得

var calendar = CalendarApp.getCalendarById('yourcalendarid@group.calendar.google.com');

yourcalendaridには、終日イベントを作成したいカレンダーのカレンダー設定→

スクリーンショット 2017-04-13 13.48.53のコピー.png

カレンダーIDを入れる。

スクリーンショット 2017-04-13 13.50.24.png


終日イベントの作成

calendar.createAllDayEvent('イベント名', new Date(year+'/'+month+'/'+day));

イベントを作りたい日が決まっているなら、Date('2017/4/13')のように指定したい日付を直接記述すれば良い。


ソースコード


MoonAge.gas

function createEvent() {

    //カレンダーID
var calendar = CalendarApp.getCalendarById('yourcalendarid@group.calendar.google.com');

//今日の日付を取得し年と月にわける
var today = new Date();
var year = today.getFullYear();
var mon = today.getMonth()+1;

//来月の月齢を計算したいので、来月にする
mon += 1;
//12月だったら来年1月に
if(mon > 12){
mon = 1;
year += 1;

}
//来月の末日を調べる
var monx = new Date(year, mon, 0);
var matubi = monx.getDate();

var i = 0;

//1日から末日まで回す
for(i=1 ; i<matubi+1 ; i++){

//月齢定数(グレゴリオ暦からの計算らしい。なんかたまに1日ズレる)
var moonAge_g = new Array(0,2,0,2,2,4,5,6,7,8,9,10);
var moonAge = (((year-11)%19)*11 + moonAge_g[mon-1]+i)%30;

        //計算した月齢で分岐
switch(moonAge){

             //月齢0だったら、朔(新月)の終日予定を作成
case 0:
calendar.createAllDayEvent('🌑朔', new Date(year+'/'+mon+'/'+i));
break;

case 3:
calendar.createAllDayEvent('🌒三日月', new Date(year+'/'+mon+'/'+i));
break;

case 7:
calendar.createAllDayEvent('🌓上弦の月', new Date(year+'/'+mon+'/'+i));
break;

case 12:
calendar.createAllDayEvent('🌔十三夜月', new Date(year+'/'+mon+'/'+i));
break;

case 15:
calendar.createAllDayEvent('🌕望月', new Date(year+'/'+mon+'/'+i));
break;

case 19:
calendar.createAllDayEvent('🌖寝待月', new Date(year+'/'+mon+'/'+i));
break;

case 23:
calendar.createAllDayEvent('🌗下弦の月', new Date(year+'/'+mon+'/'+i));
break;

case 26:
calendar.createAllDayEvent('🌘二十六夜月', new Date(year+'/'+mon+'/'+i));
break;

}
}
}



GAS側の設定

実行ボタンのとなりに時計ボタンがあるので、それを押すとスクショのような画面が表示される。

今回は毎月10日に来月の月齢を終日イベントとして作成したいので、月タイマーで10日に設定。

スクリーンショット 2017-04-13 13.56.36.png


スマホでも月齢が表示されるようになったよ!

C9Q8d_gUMAEfsrx.jpg

やったね!


おわりに

よくズレます。

グレゴリオ暦だから仕方ない。

まあ、しかし、

こんなものなくても空を眺めればよいのですよ。