Rubyでカレンダーを作るのに、「Date」クラスを使用します。「Date」クラスには日付を扱うのに便利な機能が備わっています。「クラス」というのはデータとそのデータを使った処理が書かれた設計図みたいなものです。
「Date」クラスには日付データとその処理をする命令が色々と書かれています。

require 'date'

day = Date.today#今日の日付
day1 = Date.new(2010,10,15)#指定した日付
day2 = Date.new(2010,10,-1)#月末

puts "今日の日付"
p day.year #=> 年
p day.month #=> 月
p day.day #=> 日
p day.wday #=> 日曜日が0、土曜日が6
puts "指定した日付"
p day1.year
p day1.month
p day1.day
p day1.wday
puts "月末"
p day2.year
p day2.month
p day2.day
p day2.wday

まず「require ‘date’」で「Date」クラスを利用できるようにします。「day = Date.today」では
「Date」クラスから今日の日付が入った「オブジェクト」を作成しています。オブジェクトとは設計図に基づいて
つくられた実体です。クラスを使用するにはオブジェクトを作成してそのオブジェクトを利用します。
「p day.year」では「day」オブジェクトに対して「year」メソッドを使用して西暦データを取得しています。
「year」メソッドというのは「day」オブジェクトが保持しているデータを処理する命令です。
このメソッドは予め「Date」クラスに備わっています。他にもたくさんのメソッドがあります。
「month、day、wday」も予め用意されたメソッドです。
他のメソッド詳細はリファレンス参照してください。

require 'date'

first = Date.new(2010,10)
last  = Date.new(2010,10,-1)

month = first.strftime("%Y年  %m月")+"\n"
week = "日 月 火 水 木 金 土"

puts month
puts week

if first.wday != 0 then
  for x in 1..first.wday do
     print("   ")
  end
end

for d in first.day..last.day do
   if first.wday == 6 then
     print sprintf("%2s ",d)+"\n"         
   else
     print sprintf("%2s ",d)
   end
   first = first.next
end

4行目で月末の数字が入った「last」オブジェクトを作っています。6行目の「strftime」メソッドでは日付の表示形式を指定しています。
12行目の「if」文では月の第1週目が日曜以外から始まっている場合、空白を出力しています。
18行目からの「for」文では月初から月末までの日付を繰り返し文で出力しています。
「if first.wday == 6 then」では土曜日なら日付の後ろに改行マークを追加しています。
「sprintf(“%2s “,d)」では日付の前後に半角のスペースを入れています。「sprintf」はリファレンス参照。24行目では「Date」クラスの「next」メソッドで日付を1日進めています。これでRDEのコンソールウィンドウに指定した月の
カレンダーを表示できました。しかしこのプログラムでは1年分のカレンダー表示などができません。3行目から25行目までを
12か月分書けば可能ですが非効率です。そこで次回はこのプログラムをメソッドにして繰り返し分の中の処理で呼び出すことにより
12か月分のカレンダーを表示できるようにしてみます。

2019年3月
« 4月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

広告

現在の住まい、将来はVPSへ引越します。 ロリポップの上位版です。

広告

広告

最近のコメント

    広告

    Railsを動かす予定のVPS。無料キャンペーン中。

    広告