2017-07-03 96 views
1

我創建rails應用程序,我需要將日曆放入它。我有一個json數據在一週內發送給應用程序一次。 JSON對象有這樣的事情:如何獲取星期幾的紅寶石日期

route: "Monday" 

route: "Saturday" 

我需要把這個星期幾照常日期(年月日的每個星期計算,因爲這一天,當JSON發送)例如今天發送的JSON對象,以及所有這些對象,我應該給出一個日期,路線:「星期六」應該給我2017年6月24日。希望你理解我的問題:)

+1

(一天你問的問題)是7月3日,2017年最後一個星期六是7月1日,2017前的最後一次星期六是6月24日,2017年。所以你想要的某一天的某日,一週前? – eiko

回答

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對象 - 這樣的行爲略有不同。

必須通過軌道文檔的讀取 - 尤其是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

當使用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 -v的版本爲您ruby並找到相應的版本,因爲它在版本的變化。

對於你的問題,你可以讓網址使用字符串星期一,並使用switch casehash從今天推導出eger的差異,使用這個可以得到確切的日曆日期。一旦將其解析爲Time,您也可以執行Time.monday?..Time.sunday?,在嘗試解決您的問題時您可能會或可能找不到有用的東西。有很多方法可以解決這個問題,但與Today的不同之處是一個很好的解決方案,並且Time可以像Time.now + 7.days那樣添加日子,所以使用Ruby以這種方式進行自然感覺很自然。

2

除了@TomLord答案:

可以檢驗它是星期幾,通過使用專用方法monday?saturday?

如:今天

Date.today 
# => Mon, 03 Jul 2017 
Date.today.monday? 
# => True 
Date.today.saturday? 
# => False 
+0

' 「2017-07-03T00:00:00 + 00:00」'是不是在格式'%Y-%間 - %D'。要求的「2017年6月24日」也不是。 –

+0

@TomLord'%Y-%間 - %D'是** **格式RFC3339(其開始時)的一部分。但這不是OP所要求的格式,我同意。我把這個答案,表示給其他用戶比一些格式已經被定義,也沒有必要使用'的strftime()'。在這種情況下,它是必要的。 –

+0

@TomLord我沒有看到你編輯你的答案添加自定義日期'的strftime()'我已經刪除了對轉化的部分。 –