Ruby:如何解析字符串'3天前'?

时间:2015-06-28 08:50:41

标签: ruby-on-rails ruby

给定像3 days ago这样的输入字符串,如何将其转换为日期属性?

也许像DateTime.parse('3 days ago')

4 个答案:

答案 0 :(得分:2)

使用滑轨无法做到这一点。您需要创建一个自定义解析器,或者使用已经创建的解决方案作为chronicchronic_duration

使用chronic就像您的建议一样简单

Chronic.parse('3 days ago')
=> 2020-01-10 19:28:18 UTC

答案 1 :(得分:0)

如果您使用的是Ruby on Rails,则日期和时间的语法为“ ... ago”,例如:

3.hours.ago, 1.day.ago, etc.

因此,您可以替换点的空格并评估字符串,例如:

> eval('2 days ago'.tr!(' ', '.'))
Sun, 12 Jan 2020 13:37:00 UTC +00:00

答案 2 :(得分:0)

作为一种选择,如果您将使用rails并且不需要chronic的所有其他功能,则可以编写如下内容:

def parse_date(string)
  date, *options = string.split(' ')
  options.inject(date.to_i) do |date, option|
    date.public_send(option)
  end
end

答案 3 :(得分:-2)

您可以将当前日期作为UNIX时间戳(自1970年1月1日以来的毫秒或秒),然后减去3天(也作为Unix时间戳)。

today = Time.now.to_i
three_days = 86400*3
three_days_ago_unix = today - three_days
three_days_ago_date = Time.at(three_days_ago)