如何获得星期几红宝石的日期

Dam*_*iev 2 ruby datetime ruby-on-rails

我正在创建rails应用程序,我需要将日历放入其中.我有一个json数据,可以在一周内发送给应用程序一次.JSON对象有这样的东西:

route: "Monday"
Run Code Online (Sandbox Code Playgroud)

要么

route: "Saturday"
Run Code Online (Sandbox Code Playgroud)

我需要将一周中的这一天视为通常的日期(每周计算的日期,从发送JSON的那天起),例如今天发送的JSON对象,以及所有这些我应该给出一个日期,路线:"星期六"应该在2017年6月24日给我.希望你明白我的问题:)

Tom*_*ord 6

要在Rails中获取当天,您可以使用:

Date.today
Run Code Online (Sandbox Code Playgroud)

为了让前面的周六(因为今天是Monday 3rd July,那是Saturday 1st July),你可以使用:

Date.today.beginning_of_week(:saturday)
Run Code Online (Sandbox Code Playgroud)

或者,如果您真正想要的是一周的星期六(Saturday 24th June),那么您可以使用:

Date.today.weeks_ago(1).beginning_of_week(:saturday)
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意:

1.week.ago.beginning_of_week(:saturday)
Run Code Online (Sandbox Code Playgroud)

...但是,请注意,上面的内容将返回一个ActiveSupport::TimeWithZone对象而不是一个Date对象 - 因此行为略有不同.

阅读rails文档 - 特别是ActiveSupportruby Date扩展,以查看可用的方法.

如果由于某种原因,你需要在纯粹的ruby情况下这样做(即没有上面提到的ActiveSupport扩展rails),那么你可以改为使用这个Date.parse方法:

require 'date'

Date.parse("Saturday") - 7
  # => Sat, 01 Jul 2017
Run Code Online (Sandbox Code Playgroud)

为了将你的Date(或类似的)对象转换为你想要的字符串格式("24-June-2017"),你可以使用ruby的strftime方法:

(Date.parse("Saturday") - 7).strftime('%d-%B-%Y')
Run Code Online (Sandbox Code Playgroud)

在rails中,将这种自定义日期格式放在区域设置或初始化程序中以避免重复是一种常见的约定.然后,您可以按名称引用此格式:

# config/initializers/date_formats.rb
# (Call this whatever you want!)
Date::DATE_FORMATS[:calendar] = '%d-%B-%Y'

# Anywhere else in the rails app
Date.today.beginning_of_week(:saturday).to_s(:calendar)
  # => "01-July-2017"
Run Code Online (Sandbox Code Playgroud)