Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails 3.2.8-如何从Rails获取周数?_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby Rails 3.2.8-如何从Rails获取周数?

Ruby Rails 3.2.8-如何从Rails获取周数?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我想知道如何从Rails获取当前周数,以及如何操作它: 将周数转换为日期 根据周数确定间隔 谢谢。使用: %U-一年中的周数。这周从星期天开始。(00..53) %W-一年中的周数。本周从星期一开始。(00..53) 如果要在日期中添加43周(或天、年、分钟等),可以使用ActiveSupport提供的: irb(main):001:0> 43.weeks => 301 days irb(main):002:0> Date.today + 43.weeks => Thu

我想知道如何从Rails获取当前周数,以及如何操作它:

  • 将周数转换为日期
  • 根据周数确定间隔
  • 谢谢。

    使用:

    %U
    -一年中的周数。这周从星期天开始。(00..53)
    %W
    -一年中的周数。本周从星期一开始。(00..53)

    如果要在日期中添加43周(或天、年、分钟等),可以使用ActiveSupport提供的:

    irb(main):001:0> 43.weeks
    => 301 days
    
    irb(main):002:0> Date.today + 43.weeks
    => Thu, 22 Aug 2013
    
    irb(main):003:0> Date.today + 10.days
    => Sun, 04 Nov 2012
    
    irb(main):004:0> Date.today + 1.years # or 1.year
    => Fri, 25 Oct 2013
    
    irb(main):005:0> Date.today + 5.months
    => Mon, 25 Mar 2013
    
    间歇期

    require 'date'
    
      def week_dates( week_num )
        year = Time.now.year
        week_start = Date.commercial( year, week_num, 1 )
        week_end = Date.commercial( year, week_num, 7 )
        week_start.strftime( "%m/%d/%y" ) + ' - ' + week_end.strftime("%m/%d/%y" )
      end
    
      puts week_dates(22)
    
    例:输入(周数):22

    输出:06/12/08-06/19/08

    信贷:Siep Korteling

    似乎获得了ISO-8601周编号(以周一为基础的一周),就像strftime中的
    %V
    (由@Robban在评论中提到)

    例如,我在本周的周一和周日写这篇文章:

    [ Date.new(2015, 7, 13), Date.new(2015, 7, 19) ].map { |date|
      date.strftime("U: %U - W: %W - V: %V - cweek: #{date.cweek}")
    }
    
    # => ["U: 28 - W: 28 - V: 29 - cweek: 29", "U: 29 - W: 28 - V: 29 - cweek: 29"]
    

    您将要远离strftime(“%U”)和
    “%W”

    使用
    Date.cweek

    问题是,如果您想要将周数转换为日期,
    strftime
    不会给您返回到
    date.commercial
    的值

    Date.commercial
    需要一个基于1的值范围。
    Date.strftime(“%U |%W”)
    返回一个基于0的值。你会认为你可以+1它就好了。这个问题会在一年结束的时候发生,那时有53周。(就像刚才发生的事一样…)

    例如,让我们看一下2015年12月底的情况,以及获得周数的两个选项的结果:

    Date.parse("2015-12-31").strftime("%W") = 52
    Date.parse("2015-12-31").cweek = 53
    
    现在,让我们看看如何将周数转换为日期

    Date.commercial(2015, 52, 1) = Mon, 21 Dec 2015
    Date.commercial(2015, 53, 1) = Mon, 28 Dec 2015
    
    如果盲目地将传递给
    Date.commercial
    的值+1,则在其他情况下,您将以无效日期结束:

    例如,2014年12月:

    Date.commercial(2014, 53, 1) = ArgumentError: invalid date
    

    如果您必须将周数转换回日期,唯一可靠的方法是使用
    date.cweek

    您所说的“间隔”是什么意思?间隔是两个日期之间的距离。您不能从整数生成间隔。感谢您的回复,让我澄清间隔。如果我有10月12日到10月19日,它们属于不同的星期。我想我可以将它们转换成各自的周数,然后得到周数间隔。这就是我的意思,那只是减法。将每个日期转换为周数将产生两个整数。您只需从第一个中减去第二个。请注意,strftime中的%V将为您提供ISO-8601中定义的周数。
    Date.commercial(2015, 52, 1) = Mon, 21 Dec 2015
    Date.commercial(2015, 53, 1) = Mon, 28 Dec 2015
    
    Date.commercial(2014, 53, 1) = ArgumentError: invalid date