如何解决如何将“字符串”更改为红宝石中月份或年份的日期
如何转换这样的字符串
/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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。