【问题标题】:How can i get the current weekday beginning in ruby?我怎样才能从红宝石开始当前工作日?
【发布时间】:2023-03-25 22:28:01
【问题描述】:

例如今天是 28/07/2011 我如何在红宝石中获得 2011 年 7 月 25 日星期一的第一天的星期数

【问题讨论】:

  • ...或者一周的第一天,星期日! ;-)

标签: ruby-on-rails ruby ruby-on-rails-3 datetime


【解决方案1】:
>> Date.today.beginning_of_week.strftime('%d/%m/%Y')
#=> 25/07/2011

有关更多信息,请参阅 Rails 下的 TimeDate 类,有关格式化选项的信息,请参阅 strftime

【讨论】:

  • 我怎样才能将其格式化为 25/07/2011?你也知道我如何使用 datepicker 在 javascript 中获取开始的一周
  • 格式编辑。恐怕我无法帮助您使用 javascript。
  • 我会注意到这是一个很好的解决方案,只要你有 ActiveSupport(在 Rails 中),听起来就像你做的那样。否则,您需要关注下面的@Phrogz 的suggestion
【解决方案2】:

没有 Rails/ActiveSupport:

phrogz$ irb
> require 'date'
> now = Date.today
#=> #<Date: 2011-07-28 (4911541/2,0,2299161)>
> sunday = now - now.wday
#=> #<Date: 2011-07-24 (4911533/2,0,2299161)>
> monday = now - (now.wday - 1) % 7
#=> #<Date: 2011-07-25 (4911535/2,0,2299161)>
> monday.iso8601
#=> "2011-07-25"
> monday.strftime('%d/%m/%Y')
#=> "25/07/2011"

有关更多信息,请参阅标准库中的 Date 类。

总结为方法:

require 'date'
# For weekdays to start on Monday use 1 for the offset; for Tuesday use 2, etc.
def week_start( date, offset_from_sunday=0 )
  date - (date.wday - offset_from_sunday)%7
end

sun = Date.parse '2011-07-24'
week_start(sun,0).strftime('%a, %b-%d')  #=> "Sun, Jul-24"
week_start(sun,1).strftime('%a, %b-%d')  #=> "Mon, Jul-18"

【讨论】:

  • 这不适用于周日,因为您最终会在周日之后...而不是 now - now.wday + 1 我会进入 2 行,例如: shift = (now.wday == 0) ? 6 : (now.wday - 1) 然后星期一 = 日期 - 班次
  • @DaleCooper Ack,感谢您的错误报告。你完全正确。不过,它可以比这更简单。我已经用更正的版本编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2021-03-17
相关资源
最近更新 更多