问题描述
如何转换这样的字符串
/usr/local/bin
我知道如何分割这些字符,但不知道如何将字符串作为日期类的对象。
谢谢
解决方法
也许是这样吗?
require "active_support/core_ext/integer/time"
'6.months'.split('.').then{ |n,t| n.to_i.public_send t }
#=> 6 months
所以:
Date.today + '6.months'.split('.').then{ |n,t| n.to_i.public_send t }
或修补String类:
module MyStringPatch
def to_integer_time
self.split('.').then{ |n,t| n.to_i.public_send t }
end
end
String include MyStringPatch
Date.today + '6.months'.to_integer_time
或者,如果您相信邪恶的eval
(请参阅注释),也可以这样做:
Date.today + eval('6.months')
顺便说一句,正如@AlekseiMatiushkin指出的那样
,如果来自用户输入,
#public_send
也可能很危险
如果完全确定您拥有ActiveSupport::Duration
的有效对象,则可以执行以下操作:
amount,time_span = '6.months'.split('.')
duration = amount.to_i.public_send(time_span)
Date.today + duration
amount
是String
6,而time_span
是String
个月。
duration
是ActiveSupport::Duration
6个月。
结果将是6个月中的今天,即Date