是否有一个宝石或其他东西来解析像"4h 30m""1d 4h"这样的字符串 - 有点像JIRA或任务规划人员的估计,也许是国际化?
发布第二个答案,作为慢性(我的原始答案建议)不会给你时间戳而是时间戳.
这是我的解析器.
class TimeParser TOKENS = { "m" => (60), "h" => (60 * 60), "d" => (60 * 60 * 24) } attr_reader :time def initialize(input) @input = input @time = 0 parse end def parse @input.scan(/(\d+)(\w)/).each do |amount, measure| @time += amount.to_i * TOKENS[measure] end end end
战略相当简单.拆分"5h"
成["5", "h"]
,确定有多少秒"h"
表示(TOKENS
),并且量增加@time
.
TimeParser.new("1m").time # => 60 TimeParser.new("1m wtf lol").time # => 60 TimeParser.new("4h 30m").time # => 16200 TimeParser.new("1d 4h").time # => 100800
它也不应该太难处理"1.5h"
,看到代码库就像它一样简单.
chronic_duration
做这个.
你可以使用慢性病.它几乎可以解析你所做的一切,包括"昨天","上周"等.
更新:正如OP在评论中指出的那样,Chronic是针对日期而不是时间跨度.看到我的其他答案.