學習
-
Date 需要引入:在 ruby 是屬於 std-lib(標準函式庫),與 Core 可以直接使用不一樣,前者在 .rb 檔要使用的話,我們得自行 require 才能使用。但在 terminal 中 irb 的環境,則兩者都可以直接用
-
如何 String 轉換成 Date 型別:使用 Date.parse,轉換後的值可以直接做相加減得到日期差異
盡可能縮短程式碼行數:在符合可讀性高的情況下,學習如何用越少行達成需要的功能(這次龍哥只用一行 Orz)
題目:
# 31. 是不是晚來了?
# last = 上次日期,today = 今天日期,cycle_length = 週期
def is_period_late?(last, today, cycle_length)
# 實作內容
end
答案需為:
puts is_period_late?('2016/6/13', '2016/7/16', 35) # false
puts is_period_late?('2016/6/13', '2016/7/16', 28) # true
puts is_period_late?('2016/6/13', '2016/7/16', 35) # false
puts is_period_late?('2016/6/13', '2016/6/29', 28) # false
puts is_period_late?('2016/7/12', '2016/8/9', 28) # false
puts is_period_late?('2016/7/12', '2016/8/10', 28) # true
puts is_period_late?('2016/7/1', '2016/8/1', 30) # true
puts is_period_late?('2016/6/1', '2016/6/30', 30) # false
puts is_period_late?('2016/1/1', '2016/1/31', 30) # false
puts is_period_late?('2016/1/1', '2016/2/1', 30) # true
我的答案
require 'date'
def is_period_late?(last, today, cycle_length)
last_day = Date.parse last
today = Date.parse today
(today - last_day).to_i > cycle_length
end
思路:
- 要先知道如何將 String 轉換成 Date 型態,日期進行相減,最後再做與 cycle_length 大小的判斷
- 由於完全沒做過只好再度 SOD…,查到有 Date.parse 的轉換方法,但 ruby 還是噴錯說找不到方法,想到龍哥講過有些方法 ruby 原廠有給但要自己掛(require)上去,後面就非常順利~
龍哥建議的答案
def is_period_late?(last, today, cycle_length)
Date.parse(today) - Date.parse(last) > cycle_length
end