#==============================================================================
# ■ カレンダー By 貪藻矢射妥←
#
# カレンダーを作ってみました。
#
#==============================================================================
# 更新っぽいもの
# 2024:06:01
# ・スクリプト中で使用されてる文字列の定義化追加
#
# 2024:11:01
# ・Rubyの場合、基本破壊的に変換するため、閏年の翌年も2月が29日になり、
# そのまま更に閏年を迎えると2月が30日に増えてしまうバグを修正
module CALENDAR
# 各月の日数の配列
DAYS_LIST = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#--------------------------------------------------------------------------
# ● カレンダー
#--------------------------------------------------------------------------
def get_cal(y=0, m=0)
# 空なら現在の年月を使う
t = Time.now
y = t.year if y == 0
m = t.month if m == 0
list = []
date = Time.local(y, m, 1)
# うるう年なら2月の日数+1
if leap?(y)
CALENDAR::DAYS_LIST[1] =29
else
CALENDAR::DAYS_LIST[1] =28
end
# 曜日
list.push("日 月 火 水 木 金 土\n")
# 一日の表示位置を調整
offset = date.wday % 7
weeks = " " * offset
1.upto(CALENDAR::DAYS_LIST[m-1]) {|n|
if n == t.day
weeks += "\\c[2]" + n.to_s.rjust(2) + "\\c[0] "
else
weeks += n.to_s.rjust(2) + Vocab::BLANK_WORD
end
# 土曜なら改行
if(offset + n) % 7 == 0
weeks += "\n"
list.push(weeks)
weeks = ""
end
}
list.push(weeks)
return list
end
#--------------------------------------------------------------------------
# ● 閏年判定
# 4で割り切れる年は閏年だが、100で割り切れる場合は対象外
# ただし、400で割り切れる場合は閏年
#--------------------------------------------------------------------------
def leap?(year)
if (year % 4 == 0 && year % 100 != 0) || year % 400 == 0
return true
else
return false
end
end
end
|