それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rubyなら日付を連続10日分の日付作るのがアツ−!と言う間です

Rubyがあれば、もうこんな事しなくて良いんです。

d + 60*60*24*i # 秒に直して計算

ruby はDate(日付)がRangeオブジェクトとして使えるのでとても早い

10日分の日付をあっという間に作る。

takuya@host $ ruby -r date  -e \
'(Date.parse("2010-02-11")..Date.parse("2010-02-20")).each{|i|puts i }'
2010-02-11
2010-02-12
2010-02-13
2010-02-14
2010-02-15
2010-02-16
2010-02-17
2010-02-18
2010-02-19
2010-02-20

解説

ruby -r date #これは require 'date'とおなじ
Date.parse("2010-02-11") # これは日付オブジェクトを作る
Date.parse("2010-02-11").. # これは日付を繰り返しRangeオブジェクトをつくる
Date.parse("2010-02-11")..Date.parse("2010-02-20") # 11〜20 日までを作ります。

Rangeを作る "Date#.."メソッドが強力なのです。

他にも色々ある。

Date.upto もナカナカ

 Date.parse("2011-02-18").upto(Date.parse('2011-02-28')){|d|puts d}
2011-02-18
2011-02-19
2011-02-20
2011-02-21
2011-02-22
2011-02-23
2011-02-24
2011-02-25
2011-02-26
2011-02-27
2011-02-28

upto/downto が出来る。

activesupportつかってもいいね

require 'rubygems'
require 'active_support/time'
Date.parse("2010-02-11") +  1.day
Date.parse("2010-02-11") +  2.day
Date.parse("2010-02-11") +  3.day
Date.parse("2010-02-11") +  4.day
Date.parse("2010-02-11") +  5.day
Date.parse("2010-02-11") +  6.day
Date.parse("2010-02-11") +  7.day
Date.parse("2010-02-11") +  8.day
Date.parse("2010-02-11") +  9.day
Date.parse("2010-02-11") + 10.day

これを省略すると

(1..10).map{|i| Date.parse("2010-02-11") + i.day }


解説

 1.day # Integerメソッドを追加されている。一日分の日付の差分を返す
Date.parse("2010-02-11") + # Date#+ で日付の足し算ができる。

ほんとRuby楽です。日付を扱うのが楽しくなりました。




python だと list Comprehensionで何とかできる。PHPはどうしようもない。array_mapでがんばれ

2011-02-18

Date#uptoを忘れていたので追記した。