ruby-on-rails - 执行作为字符串接收的日期时间命令
问题描述
我有"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"
解决方案
不,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
推荐阅读
- node.js - 为什么我的 IBM Cloud Foundry 应用程序一直离线
- react-native - 反应原生 svg 弧路径
- c - 为什么在二维静态数组arr中,arr和*arr是一回事
- dart - 颤振:在构建 ui 时执行大小错误?
- sql - 交叉应用于 SQL 服务器上的列。附近的语法错误)
- c# - Fluentvalidation 仅验证是否填充了字段
- javascript - D3 v4 日期刻度从不显示最后一项
- c# - 如何为实现相同接口的多种类型制作通用字典?
- python - 一旦玩家在 2x2 网格上使用 5x5 网格上的号码,我如何让这个游戏停止
- c++ - 如何避免将参数传递给基于引用的帮助器类的模板实例化