【问题标题】:How can I calculate the day of the week of a date in ruby?如何计算红宝石日期的星期几?
【发布时间】:2010-10-28 15:43:56
【问题描述】:

如何在 Ruby 中计算日期的星期几?例如,2010 年 10 月 28 日是 = 星期四

【问题讨论】:

    标签: ruby date


    【解决方案1】:
    Date.today.strftime("%A")
    => "Wednesday"
    
    Date.today.strftime("%A").downcase  
    => "wednesday"
    

    【讨论】:

      【解决方案2】:

      我之所以使用它,是因为我讨厌去 Date 文档查找 strftime 语法,但没有找到它并且必须记住它在 Time 文档中。

      require 'date'
      
      class Date
        def dayname
           DAYNAMES[self.wday]
        end
      
        def abbr_dayname
          ABBR_DAYNAMES[self.wday]
        end
      end
      
      today = Date.today
      
      puts today.dayname
      puts today.abbr_dayname
      

      【讨论】:

      • 看起来 Time 类也有一个#wday 方法,FWIW。
      • 将 steenslag 提炼成直接回答发帖人的一行:使用Date::ABBR_DAYNAMES[Date.today.wday]。 (您必须先包含 Date 库才能使用它:require Date。)选项:要显示全天名称而不是前三个字母,请使用 DAYNAMES 而不是 ABBR_DAYNAMES
      • 有什么方法可以从 0..6 中得到一个数字而不需要自己转换?
      • 我认为下面 mway 的解决方案可能是更好的方法——重新定义已经存在的功能(即 dateObj.strftime('%A'))没有意义,对吧?跨度>
      【解决方案3】:

      看看Date class reference。一旦你有了一个日期对象,你可以简单地用dateObj.strftime('%A') 表示全天,或者用dateObj.strftime('%a') 表示缩写的一天。您也可以使用dateObj.wday 作为星期几的整数值,并根据需要使用它。

      【讨论】:

      • 如果你使用 Rails,你会如何本地化?
      • #wday 应该是这个问题的最佳答案。
      【解决方案4】:
      time = Time.at(time)    # Convert number of seconds into Time object.
      puts time.wday    # => 0: Day of week: 0 is Sunday
      

      【讨论】:

      • 还有 Time#cwday 用于获取 1-7 范围内的日期。这些方法现在(至少是 Ruby 2.3)也出现在 Date 类中。
      • Time 没有cwday,但Date 有。
      【解决方案5】:

      快速、肮脏和本地化友好:

      days = {0 => "Sunday",
      1 => "Monday", 
      2 => "Tuesday",
      3 => "Wednesday",
      4 => "Thursday",
      5 => "Friday",
      6 => "Saturday"}
      
      puts "It's #{days[Time.now.wday]}"
      

      【讨论】:

        【解决方案6】:

        使用 ruby​​ 开箱即用,无需:

        Time.now.strftime("%A").downcase #=> "thursday"
        

        【讨论】:

          【解决方案7】:

          正如@mway 所说,您可以在任何 Date 对象上使用 date.strftime("%A") 来获取星期几。

          如果你很幸运,Date.parse 可能会一口气把你从 String 带到一周中的某一天:

          def weekday(date_string)
            Date.parse(date_string).strftime("%A")
          end
          

          这适用于您的测试用例:

          weekday("October 28 of 2010") #=> "Thursday"
          

          【讨论】:

            【解决方案8】:

            假设我有date = Time.now.to_date 然后date.strftime("%A") 将打印星期几的名称,并将星期几的数字写成date.wday

            【讨论】:

              【解决方案9】:

              在您的时间对象中,使用属性 .wday 获取与星期几对应的数字,例如如果 .wday 返回 0,那么您的日期是星期日、1 星期一等。

              【讨论】:

                【解决方案10】:

                与安德烈亚斯的答案基本相同

                days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
                today_is = days[Time.now.wday]
                
                if today_is == 'tuesday'
                  ## ...
                end
                

                【讨论】:

                  猜你喜欢
                  • 2019-05-16
                  • 2011-09-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多