给定像3 days ago
这样的输入字符串,如何将其转换为日期属性?
也许像DateTime.parse('3 days ago')
?
答案 0 :(得分:2)
使用滑轨无法做到这一点。您需要创建一个自定义解析器,或者使用已经创建的解决方案作为chronic或chronic_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)