這個代碼是有意義的英文:
post.created_at < 30.days.ago
你的大腦把它讀成:
如果這個帖子被創建不到30天前...
但是,紅寶石將其讀爲:
如果這個帖子被創建的日期小於(前)之日起30天前...
記住30.days.ago
返回datetime,而不是時間。假設post.created_at
是兩週前的,即2016-01-06(實際上它是DateTime,但爲了演示我們將忽略時間)。兩週不到30天,所以你可能會期望你的表情評估爲true
。但是,30.days.ago
返回日期2015-12-22。把這些值轉換成我們的表達(現僞代碼):
2016-01-06 < 2015-12-22
這個計算結果爲false
,因爲左邊的日期是前不(閱讀:不小於)右側的日期。
爲了測試post.created_at
是否是後(讀:大於)30.days.ago
,我們必須扭轉操作:
if post.created_at > 30.days.ago
附:另一種考慮的方式是30天前的日期是否在(小於)post.created_at
之前。這基本上(如果不完全)等同:
if post.created_at > (DateTime.now - 30.days)
或者你可以考慮post.created_at
是否30.days.ago
與今天:
if post.created_at.between?(30.days.ago, DateTime.now)
或者,由於post.created_at
經過的時間是否少於30天:
if (DateTime.now - post.created_at) < 30.days
(請注意,而30.days.ago
返回datetime,30.days
返回durati )
@MrYoshiji它沒有改變任何東西。輸出仍然是一樣的。 –