是否有一个通用解析器来解析"…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