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



是否有一个通用解析器来解析"…ago"字符串并将其转换为DateTime对象?

可能的句子有:

  • 1年前|@count年(以及1周前|@comput周)
  • 1周前|@count周(以及1天前|@ccount天)
  • 1天前|@count天(和1小时|@count小时)
  • 1小时|@count小时前(和1分钟|@count-min)
  • 1分钟|@count分钟前(和1秒|@count-sec前)
  • 1秒|@count秒前

所以它要么是两个(Foo和Bar ago)的组合,要么只有一个(Fooa ago)。它可以是单数也可以是复数。

Ruby的DateTime::parse()不能处理这个问题,DateTime::strptime()也不能。

我希望能在某个地方找到一块宝石或一个片段来处理这个问题。

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

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

慢性宝石可能就是您想要的。

require 'chronic'
Chronic.parse "2 days ago"
# => 2011-06-14 14:13:59 -0700

根据@injekt(慢性病的维护者之一),你可以这样处理"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

相关内容

  • 没有找到相关文章

最新更新