首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红宝石有什么方法可以在4-5-4 (零售)日历中找到年初吗?

红宝石有什么方法可以在4-5-4 (零售)日历中找到年初吗?
EN

Stack Overflow用户
提问于 2014-05-08 02:01:37
回答 1查看 487关注 0票数 1

我正试图在Rails应用程序中构建零售销售报告。我正在编写一个创业板,它可以在零售日历中找到零售月份/季度/季度的开始日期和结束日期

我很难决定今年年初。

例:2014年,2015年2月2日开始,2月1日,2016年1月31日。

在Ruby或其他语言中,是否有人遇到过这样的要求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-08 19:29:49

代码语言:javascript
复制
require 'date'

# Class for 5-4-4, 4-5-4, and 4-4-5 calendars
class Calendar13

    def initialize (type = 454, yr_end_mo = 1)
        case type
        when 544, 454, 445 then @type = type
        else raise ArgumentError, "Bad calendar type #{type}"
        end
        if (1..12) === yr_end_mo then @yr_end_mo = yr_end_mo
        else raise ArgumentError, "Bad year-end month #{yr_end_mo}"
        end
    end

    # Return the ending date for a particular year
    def end_of_year (year)
        year += 1 unless @yr_end_mo == 12
        year_end = Date.new year, @yr_end_mo, -1
        wday = (year_end.wday + 1) % 7 # Saturday-origin day-of-week
        # Advance or retreat to closest Saturday
        if wday > 3 then year_end += 7 - wday
        elsif wday > 0 then year_end -= wday
        end
        year_end
    end

    # Return starting date for a particular year
    def start_of_year (year); end_of_year(year - 1) + 1; end

    # Return starting date for a particular month
    def start_of_month (year, month)
        start = start_of_year(year) + ((month - 1) / 3).to_i * 91
        case @type * 10 + (month - 1) % 3
        when 4451, 4541 then start += 28
        when 5441 then start += 35
        when 4452 then start += 56
        when 4542, 5442 then start += 63
        end
        start
    end

    # Return the ending date for a particular month
    def end_of_month (year, month)
        if month == 12 then end_of_year year
        else start_of_month(year, month + 1) - 1
        end
    end

    # Return the starting date for a particular quarter
    def start_of_quarter (year, quarter)
        start_of_month year, (quarter - 1) * 3 + 1
    end

    # Return the ending date for a particular quarter
    def end_of_quarter (year, quarter)
        if quarter == 4 then end_of_year year
        else start_of_quarter(year, quarter + 1) - 1
        end
    end

    # Return the number of weeks in a particular year
    def weeks_in_year (year)
        ((start_of_year(year + 1) - start_of_year(year)) / 7).to_i
    end

end

另见http://www.smythretail.com/general-retailing/how-to-set-up-a-4-5-4-calendar/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23531481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档