携帯サイト用のカレンダー作成

 携帯iモード版のグループウェアを作ろうと考えている。グループウェアに最低限必要なものを挙げるとしたら、予定表掲示板といったところだろうか。予定表といったら、カレンダー表示は欠かせない。そこで簡単なカレンダーを表示するPerlスクリプトを書いてみた。
 カレンダー表示で必要な関数は、先ず該当年月日は、何曜日かを求める関数である。


# ——————————————————————————
# Function : get_day_of_week()
# Parameter: $year:西暦, $mon:月, $day:日
# Return : 曜日番号
# Comment : 指定日の曜日番号を取得する
# ——————————————————————————
sub getDayOfWeek {
  my $year = shift; # 年
  my $mon = shift;  # 月
  my $day = shift;  # 日
  
  if ($mon == 1 or $mon == 2) {
    $year–;
    $mon += 12;
  }
  return ($year + int($year / 4) - int($year/100) + int($year / 400)
    + int((13 * $mon + 8) / 5) + $day) % 7;
}


 次に、該当年の何月は、何日あるかを求める関数である。要するに閏年を計算して月の日数を計算する関数である。


# ——————————————————————————
# Function : getMonthEndDate()
# Parameter: $year:西暦
# Return : 当該年の各月の日数テーブル
# Comment : 当該年の各月の日数テーブルを取得
# ——————————————————————————
sub getMonthEndDate {
  my $year = shift; # 年
  my $mon = shift;  # 月
  my @enddatetbl = (31,28,31,30,31,30,31,31,30,31,30,31);
  if ($year =~ m/\D/) {
    return ();
  }
  if ($year % 4 == 0) {
    if ($year % 100 == 0) {
      if ($year % 400 == 0) {
        $enddatetbl[1] = 29;
      }
      else {
        $enddatetbl[1] = 28;
      }
    }
    else {
      $enddatetbl[1] = 29;
    }
  }
  else {
    $enddatetbl[1] = 28;
  }
  return @enddatetbl[$mon - 1];
}


 さらには携帯iモードでは罫線タグ(TR, TD)などは使えない。限られた狭い画面の中に1ヶ月の暦を表示するのはけっこう難しいのだが、これを何とか解決して表示させたのが下のフレーム内のカレンダーである。一応デフォルト表示は今月を、????年??月の左右の不等号をクリックすると、年月を変えることが出来る。

 実は,これはまだまだ完全ではなく、祝祭日の表示はまだ棚上げの状態である。というのも、振替休日はどうするのかとか、年によって日が変わる休日をどうするかとか、けっこう難しい問題が山積しているからである。

 ここまでのPerlのスクリプトが欲しい方は、下のリンクからダウンロードできる。
http://sunao-labo.hp.infoseek.co.jp/software/calender_i.lzh


ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!

Post a Comment

You must be logged in to post a comment.