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

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

More than 1 year has passed since last update.

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

満月だとなんだかそわそわする。
新月だとふさぎ込む。
そんな経験ありませんか?
予め月齢を知りたくありませんか??

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

やったね!

おわりに

よくズレます。
グレゴリオ暦だから仕方ない。

まあ、しかし、
こんなものなくても空を眺めればよいのですよ。

5sick
工学系女児です.たいしたことやらない
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
ユーザーは見つかりませんでした