// 2021/06/15 から 2021/11/08 までの日数とかを求める
// / だけじゃなくて - でもいけるようにしている
// わかりやすさ優先でかっこ悪い記述になってますので適当に修正してください
int getDateDIF(String strDateFrom, String strDateTo)
{
  // 同じ日だったら0を返す
  if (strDateFrom.equals(strDateTo)) return 0;
  
  // 年月日T時分秒形式のものの場合，Tより前を日時として取得する
  if (strDateFrom.split("T").length == 2) strDateFrom = strDateFrom.split("T")[0];
  if (strDateFrom.split("T").length == 2) strDateTo = strDateTo.split("T")[0];

  // / で文字列分割したときに3つに分割できる？
  if (strDateFrom.split("/").length == 3 && strDateTo.split("/").length == 3) {
    // 0番目が年、1番目が月、2番目が日
    int fromYear  = int(strDateFrom.split("/")[0]);
    int fromMonth = int(strDateFrom.split("/")[1]);
    int fromDay   = int(strDateFrom.split("/")[2]);
    int toYear  = int(strDateTo.split("/")[0]);
    int toMonth = int(strDateTo.split("/")[1]);
    int toDay   = int(strDateTo.split("/")[2]);
    // 各々の年月日情報から差分を求めよう！
    return getDateDIF(fromYear, fromMonth, fromDay, toYear, toMonth, toDay);
  } else if (strDateFrom.split("-").length == 3 && strDateTo.split("-").length == 3) {
    // 0番目が年、1番目が月、2番目が日
    int fromYear  = int(strDateFrom.split("-")[0]);
    int fromMonth = int(strDateFrom.split("-")[1]);
    int fromDay   = int(strDateFrom.split("-")[2]);
    int toYear  = int(strDateTo.split("-")[0]);
    int toMonth = int(strDateTo.split("-")[1]);
    int toDay   = int(strDateTo.split("-")[2]);
    // 各々の年月日情報から差分を求めよう！
    return getDateDIF(fromYear, fromMonth, fromDay, toYear, toMonth, toDay);
  }
  // 一致しなかったら0を返す
  return 0;
}

// getDateDIFという名前は同じだけど引数の数などが違うので定義可能
// 年月日をそれぞれ数値で受け取ると差を求めるよ！
int getDateDIF(int _fromYear, int _fromMonth, int _fromDay, int _toYear, int _toMonth, int _toDay)
{
  int num_of_days = - _fromDay;
  int _year = _fromYear;
  int _month = _fromMonth;

  // Date型に変換してgetTime()などを使って数値に変換し、差分を求めるのが簡単
  // でもここではあえて、順に数えるようにしている
  // forの1つ目に何も書かないと初期化をしないってだけ
  for (; _year <= _toYear; _year++) {
    if (_year == _toYear) {
      // 今の年 _year が終了年と一致してるので終了月までカウント
      for (; _month <= _toMonth; _month++) {
        if (_month == _toMonth) return num_of_days + _toDay;
        else num_of_days += getLastDay(_year, _month);
      }
    } else {
      // 年が一致していないので12月まで数えるよ
      for (; _month <= 12; _month++)
        num_of_days += getLastDay(_year, _month);
    }
    _month = 1;
  }
  return num_of_days;
}

// プログラミング演習1でやった、年月を指定したときの最終日を求める関数
int getLastDay(int _year, int _month)
{
  if (_month == 4 || _month == 6 || _month == 9 || _month == 11 ) return 30;
  else if (_month == 2) {
    if (_year % 400 == 0) return 29;
    else if (_year % 100 == 0) return 28;
    else if (_year % 4 == 0 ) return 29;
    return 28;
  }
  return 31;
}
