gpt4 book ai didi

ruby-on-rails - 在 Ruby/Rails 中生成介于 2 个日期之间的商业周列表

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:39 26 4
gpt4 key购买 nike

我正在尝试创建一个年周列表(相当于 mySQL 的 YEARWEEK(date,1)) 落在 Rails 中的两个日期值之间。如果开始日期和结束日期在同一年下降,列表将完美生成。这是我的代码:

  campaign_start_date = "2013-08-02 06:59:00"
campaing_end_date = "2013-09-01 06:59:00"

start_year = DateTime.parse(campaign_start_date).cwyear
start_week = "%04d%02d" % [start_year, DateTime.parse(campaign_start_date).cweek]

end_year = DateTime.parse(campaing_end_date).cwyear
end_week = "%04d%02d" % [end_year, DateTime.parse(campaing_end_date).cweek]

if start_year == end_year
(start_week..end_week).each{ |i| result << i }
else
# need to build a suitable logic here. to handle the case when duration spans over multiple years. for example started in 01-Nov-14 and ended in 01-May-15
end

return result

上面的日期值不会有问题,会落到if case,得到的结果是:

[
"201331",
"201332",
"201332",
"201333",
"201334",
"201335"
]

这也是我真正想要的。但是,如果我的开始日期和结束日期值是这些,例如:

  campaign_start_date = "2014-07-23 06:59:00"
campaing_end_date = "2015-03-01 06:59:00"

意味着在不同的年份下降,那么它需要与我在 if 条件下的逻辑不同,因为对于这些日期值(start_week=201430end_week =201509) if 条件在这里不合适,因为它会生成 80 值,这是错误的,因为这些日期之间的周数不是 80。需要帮助开发 else 案例的逻辑。可能很容易,但现在我只是厌倦了更深入地挖掘它。

特别注意:解决方案应该关心商业年和商业周(引用 rails 的 .cwyear 和 .cweek 函数)例如 2016-01-01 的年周将是 201553 而不是 201601

在这方面的任何帮助将不胜感激。

最佳答案

感谢那些回复t的人。我终于解决了这样的问题:

  campaign_weeks = []

campaign_start_date = "2014-07-23 06:59:00" # or any date
campaing_end_date = "2015-03-01 06:59:00" # or any date

start_year = DateTime.parse(campaign_start_date).cwyear
start_cweek_of_the_campaign = "%04d%02d" % [start_year, DateTime.parse(campaign_start_date).cweek]

end_year = DateTime.parse(campaing_end_date).cwyear
end_cweek_of_the_campaign = "%04d%02d" % [end_year, DateTime.parse(campaing_end_date).cweek]

if start_year == end_year
(start_cweek_of_the_campaign..end_cweek_of_the_campaign).each do |w|
campaign_weeks << ("%04d%02d" % [start_year, w])
end
else
(start_year..end_year).each do |y|
first_cweek_number_of_the_year = (y == start_year) ? start_cweek_of_the_campaign : 1
last_cweek_number_of_the_year = (y == end_year) ? end_cweek_of_the_campaign : DateTime.new(y, 12, 28).cweek
(first_cweek_number_of_the_year .. last_cweek_number_of_the_year).each do |w|
campaign_weeks << ("%04d%02d" % [y, w])
end
end
end

return campaign_weeks

注意:12 月 28 日总是在一年的最后一周/等周。一年中的最后一个 ISO 周是 52 或 53。

引用:http://en.wikipedia.org/wiki/ISO_week_date#Last_week

从这个答案中得到一些提示:Calculating the number of weeks in a year with Ruby

关于ruby-on-rails - 在 Ruby/Rails 中生成介于 2 个日期之间的商业周列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com