在Ruby中解析"X years and Y weeks ago"中的相似字符串

ber*_*kes 7 ruby datetime parsing

是否有一个通用解析器来解析"... before"字符串并将它们转换为DateTime对象?

可能的句子是:

  • 1年| @count年(和1周| @count周)之前
  • 1周| @count周(和1天| @count天)之前
  • 1天| @count天(和1小时| @count小时)前
  • 1小时| @count小时前(和1分钟| @count分钟)前
  • 1分钟| @count分钟前(和1秒| @count秒)前
  • 1秒| @count秒前

所以它要么是两个的组合(Foo和Bar之前),要么只有一个(Foo之前​​).它可以是单数或复数.

Ruby DateTime::parse()无法处理这个问题,也无法处理DateTime::strptime().

我希望有一个宝石或片段处理这个.

否则我将不得不创建自己的解析器,在这种情况下,非常欢迎指向如何创建自己的DateTime解析器的指针.

旁注:对于未来参考:这些是Drupals Format Interval生成的时间字符串

Dyl*_*kow 9

慢性宝石可能是你在找什么.

require 'chronic'
Chronic.parse "2 days ago"
# => 2011-06-14 14:13:59 -0700
Run Code Online (Sandbox Code Playgroud)

Per @injekt(Chronic的维护者之一),你可以像这样处理"1年1周前":

str = "one year and 1 week ago"
chunks = str.split('and')

Chronic.parse(chunks[1], :now => Chronic.parse(chunks[0] + 'ago'))
#=> 2010-06-09 14:29:37 -0700
Run Code Online (Sandbox Code Playgroud)

  • (慢性维护者在这里)@dmarkow是正确的,慢性不能处理像"1年和1周前"这样的事情,但通常很容易将它们分成几个部分并分别处理它们.请尽快在http://github.com/mojombo/chronic上打开功能请求,我会调查一下! (4认同)