2016-06-28 105 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