我正在创建rails app,我需要将日历放入其中。我有一个json数据,可以在一周内发送给应用程序一次。 JSON对象有这样的东西:
route: "Monday"
或
route: "Saturday"
我需要将一周中的这一天视为通常的日期(自发送JSON之日起每周计算的日期),例如今天发送的JSON对象,以及所有这些日期,我应该给出日期,路由:“星期六”应该给我24-June-2017。希望你理解我的问题:)
答案 0 :(得分:6)
要在Rails中获取当天,您可以使用:
Date.today
要获取上周六(今天为Monday 3rd July
,即Saturday 1st July
),您可以使用:
Date.today.beginning_of_week(:saturday)
或者,如果您真正想要的是之前周的周六(Saturday 24th June
),那么您可以使用:
Date.today.weeks_ago(1).beginning_of_week(:saturday)
或者,如果您愿意:
1.week.ago.beginning_of_week(:saturday)
...但是,请注意,上述内容将返回ActiveSupport::TimeWithZone
个对象而不是Date
个对象 - 因此行为略有不同。
阅读rails文档 - 特别是ActiveSupport
extensions to ruby's Date
class,了解可用的方法。
如果出于某种原因,您需要在纯ruby
中执行此操作(即没有与ActiveSupport
捆绑在一起的上述rails
扩展名),那么您可以改为使用Date.parse
method:
require 'date'
Date.parse("Saturday") - 7
# => Sat, 01 Jul 2017
为了将Date
(或类似)对象转换为您想要的字符串格式("24-June-2017"
),您可以使用ruby的strftime
方法:
(Date.parse("Saturday") - 7).strftime('%d-%B-%Y')
在rails中,common convention将这些自定义日期格式放在区域设置或初始化程序中以避免重复。然后,您可以按名称引用此格式:
# 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"
答案 1 :(得分:2)
除了@TomLord回答:
可以使用专用方法monday?
至saturday?
e.g:
Date.today
# => Mon, 03 Jul 2017
Date.today.monday?
# => True
Date.today.saturday?
# => False
答案 2 :(得分:1)
使用Ruby
中的任何内置软件包时,最好查看文档以获取可用的功能和示例。对于时间,Ruby
附带了一个方便的Time
对象,这简化了我们与Time
进行的大部分互动。
例如,可以使用以下方式获取当前时间:
t = Time.now
,然后可以(t + 1.days).monday?
或(t + 2.days).day == 1.
天数已经有相应的int
值。
http://ruby-doc.org/core-2.4.1/Time.html
此文档适用于最新版本,但您可以找到ruby
ruby -v
的版本,并查找相应的版本,因为它确实会更改版本。
对于您的问题,您可以让网址使用字符串星期一,并使用switch case
或hash
从今天获得int
埃格尔差异,使用此字符可以得到确切的结果日历日期。一旦将其解析为Time
,您也可以执行Time.monday?..Time.sunday?
,在尝试解决问题时,您可能会或可能不会觉得有用。有很多方法可以解决它,但与今天的区别是一个很好的解决方案,并且Time
如何能够添加像Time.now + 7.days
这样的日子,使用Ruby以这种方式做这件事感觉很自然。