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

时间:2017-07-03 14:08:28

标签: ruby-on-rails ruby datetime

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

route: "Monday"

route: "Saturday"

我需要将一周中的这一天视为通常的日期(自发送JSON之日起每周计算的日期),例如今天发送的JSON对象,以及所有这些日期,我应该给出日期,路由:“星期六”应该给我24-June-2017。希望你理解我的问题:)

3 个答案:

答案 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 casehash从今天获得int埃格尔差异,使用此字符可以得到确切的结果日历日期。一旦将其解析为Time,您也可以执行Time.monday?..Time.sunday?,在尝试解决问题时,您可能会或可能不会觉得有用。有很多方法可以解决它,但与今天的区别是一个很好的解决方案,并且Time如何能够添加像Time.now + 7.days这样的日子,使用Ruby以这种方式做这件事感觉很自然。