如何将“字符串”更改为红宝石中月份或年份的日期

问题描述

如何转换这样的字符串

/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

amountString 6,而time_spanString个月。 durationActiveSupport::Duration 6个月。 结果将是6个月中的今天,即Date