首页 > 解决方案 > 执行作为字符串接收的日期时间命令

问题描述

我有"20.days.from_now"字符串格式的日期信息。有了这个数据,我应该能够在任何给定的时间点找到确切的日期。但我找不到执行它的方法。

试过:

1. "20.days.from_now".to_datetime => returns DateTime.now.beginning_of_day + 20.seconds
2. "20.days.from_now".to_datetime => returns Time.now.beginning_of_day + 20.seconds

不能将此作为参数传递给Time/DateTime方法。

有没有一种有效的方法来实现这一目标?

可能的输入可能是:

1. "20.days.from_now"
2. "45.seconds.from_now"
3. "-11.months.from_now"
4. "3.years.from_now"
5. "15.hours.from_now"
6. "860.minutes.from_now"

标签: ruby-on-railsruby

解决方案


不,Rails 没有内置的方法来执行此操作(缺少eval,您绝对不想要)。

您需要编写一个解析器,可能使用正则表达式,专门针对您的用例。

尝试类似:

ALLOWED_UNITS = %w(years months days hours minutes seconds)

if str =~ /\A(-?\d+)\.(\w+)\.from_now\z/ and
    ALLOWED_UNITS.include?($2)
  $1.to_i.public_send($2).from_now
end

推荐阅读