module MonthDate

Constants

VERSION

Public Class Methods

date_in_month(year, month, format="%Y%m%d", day_type=false) click to toggle source
# File lib/month_date.rb, line 94
def MonthDate.date_in_month(year, month, format="%Y%m%d", day_type=false)
    days = self.days_in_month(year, month)
    ary = []
    result = {:weekend=>[], :weekday=>[]}
    if day_type
        1.upto(days) do |day|
            date = Date.new(year, month, day)
            if self.weekend?(date)
                result[:weekend] << date.strftime(format)
            else
                result[:weekday] << date.strftime(format)
            end
        end
        return result
    else
        1.upto(days) do |day|

            date = Date.new(year, month, day)

            ary << date.strftime(format)
        end
        return ary
    end
end
date_in_month_weekday(year, month, format="%Y%m%d") click to toggle source
# File lib/month_date.rb, line 129
def MonthDate.date_in_month_weekday(year, month, format="%Y%m%d")
    days = self.days_in_month(year, month)
    result = []
    1.upto(days) do |day|
        date = Date.new(year, month, day)
        result << date.strftime(format) unless self.weekend?(date)
    end
    return result
end
date_in_month_weekend(year, month, format="%Y%m%d") click to toggle source
# File lib/month_date.rb, line 119
def MonthDate.date_in_month_weekend(year, month, format="%Y%m%d")
    days = self.days_in_month(year, month)
    result = []
    1.upto(days) do |day|
        date = Date.new(year, month, day)
        result << date.strftime(format) if self.weekend?(date)
    end
    return result
end
dates_in_range(start_date, end_date, format="%Y%m%d", day_type=false) click to toggle source
# File lib/month_date.rb, line 22
def MonthDate.dates_in_range(start_date, end_date, format="%Y%m%d", day_type=false)
    start_date = Time.parse(start_date.to_s)
    end_date = Time.parse(end_date.to_s)
    weekend = []
    weekday = []
    if start_date.mon == end_date.mon && start_date.year == end_date.year
        (start_date.day..end_date.day).to_a.each do |day|
            date = Date.new(start_date.year, start_date.mon, day)
            if self.weekend?(date)
                weekend << date.strftime(format)
            else
                weekday << date.strftime(format)
            end
        end
    elsif start_date.year == end_date.year
        # first count the start date month date.
        (start_date.day..self.days_in_month(start_date.year, start_date.mon)).to_a.each do |day|
            date = Date.new(start_date.year, start_date.mon, day)
            if self.weekend?(date)
                weekend << date.strftime(format)
            else
                weekday << date.strftime(format)
            end
        end
        (start_date.mon+1..end_date.mon-1).to_a.each do |month|
            tmp = self.date_in_month(start_date.year, month, format, true)
            weekend += tmp[:weekend]
            weekday += tmp[:weekday]
        end
        (1..end_date.day).each do |day|
            date = Date.new(end_date.year, end_date.mon, day)
            if self.weekend?(date)
                weekend << date.strftime(format)
            else
                weekday << date.strftime(format)
            end
        end
    else
        (start_date.day..self.days_in_month(start_date.year, start_date.mon)).to_a.each do |day|
            date = Date.new(start_date.year, start_date.mon, day)
            if self.weekend?(date)
                weekend << date.strftime(format)
            else
                weekday << date.strftime(format)
            end
        end
        (start_date.mon+1..12).to_a.each do |month|
            tmp = self.date_in_month(start_date.year, month, format, true)
            weekend += tmp[:weekend]
            weekday += tmp[:weekday]
        end
        (1..end_date.mon-1).to_a.each do |month|
            tmp = self.date_in_month(end_date.year, month, format, true)
            weekend += tmp[:weekend]
            weekday += tmp[:weekday]
        end
        (1..end_date.day).each do |day|
            date = Date.new(end_date.year, end_date.mon, day)
            if self.weekend?(date)
                weekend << date.strftime(format)
            else
                weekday << date.strftime(format)
            end
        end
    end
    if day_type
        return {:weekday=>weekday, :weekend=>weekend}
    else
        return (weekday + weekend).sort
    end
end
days_in_month(year, month) click to toggle source
# File lib/month_date.rb, line 18
def MonthDate.days_in_month(year, month)
    Date.new(year, month, -1).day
end
week_date_in_month(year, month, week, format="%Y%m%d") click to toggle source
# File lib/month_date.rb, line 6
def MonthDate.week_date_in_month(year, month, week, format="%Y%m%d")
    days = self.days_in_month(year, month)
    result = []
    1.upto(days) do |day|
        date = Date.new(year, month, day)
        if date.wday == week
            result << date.strftime(format)
        end
    end
    return result
end
weekend?(date) click to toggle source
# File lib/month_date.rb, line 139
def self.weekend?(date)
    wday = date.wday
    if wday == 0 || wday == 6
        return true
    else
        return false
    end
end