2016-06-28 169 views
-4

我有一個格式爲dd mmm'yy的日期列(例如:26 Jun'17)。這些日期必須檢查,如果他們使用Ruby過期。我該怎麼辦?如何驗證日期是否已過期/通過?

謝謝!

+0

的可能的複製[紅寶石解析日期字符串] (http://stackoverflow.com/questions/21391953/ruby-parse-date-string) –

+0

我已經看到了很多狂野和狡猾的日期格式,但那是一個真正令人困惑的尷尬。 – tadman

+0

我不想將此標記爲提名示例的副本,因爲該問題已關閉。不過,我認爲這個問題還不清楚。你是否想要解析日期字符串,或者檢查日期是否過期,或兩者兼得?如果您需要幫助檢查它是否過期,那麼「過期」是什麼意思?這是否意味着你需要知道日期是否比某個恆定的日期更早?或者說它比今天更古老呢? –

回答

1
d = "26 Jun'17" 
#⇒ "26 Jun'17" 
▶ Date.today >= Date.parse(d.tr("'", ' ')) 
#⇒ false 

Date#parse理解「17年6月26日」:

▶ Date.parse d.tr("'", ' ') 
#⇒ #<Date: 2017-06-26 ((2457931j,0s,0n),+0s,2299161j)> 
+0

2016年或2017年是「2016年6月16日」嗎?由於這個原因,兩位數的年份是荒謬的。在20世紀80年代和90年代,你擁有非衝突數字的奢侈品,但直到2032年,我們纔會回到正軌。 – tadman

+0

@tadman嗯,整個Rails Colossus建立在_conventions_的地下室。畢竟'01/02/2016'具有相同的含糊性。 'DateTime'將XX Jun YY'視爲「當前世紀的YY,今年XX,XX日」,我們可能應該考慮使用它。 – mudasobwa

+0

@tadman人們應該使用數字來代替天數,字母數月和羅馬字符多年:'6月17日MMXVI'。 – mudasobwa

0

將其轉換爲DateTime對象,並且然後與其他日期時間對象?

time_one = DateTime.new(2001,2,3) 
time_two = DateTime.new(2001,1,3) 

time_one > time_two 
1

您可以使用Date模塊從Ruby的標準庫來解析您的日期字符串,然後使用<=>比較。

順便說一句,如果你是在一個「純」紅寶石的環境中工作(不是Rails的控制檯),你不得不把它列入到你的代碼:

require 'date' 

Date.parse("26 Jun'17") > Date.today    # => true