Rails - 将字符串转换为时间

时间:2018-01-18 07:14:41

标签: ruby-on-rails ruby

我正在尝试将这些字符串解析为时间:"3 on Jun 20""Jun 20 at 3""Jun 20 at 300"

使用DateTime.parse未将"3""300"解析为"3:00 AM",它只返回Wed, 20 Jun 2018 00:00:00 +0000

任何人都有任何想法将这些整数解析为时间吗?

3 个答案:

答案 0 :(得分:6)

Chronic"自然语言日期/时间解析器"

require 'chronic'

Chronic.parse('3 on Jun 20')    #=> 2018-06-20 15:00:00 +0200
Chronic.parse('Jun 20 at 3')    #=> 2018-06-20 15:00:00 +0200
Chronic.parse('Jun 20 at 300')  #=> 2018-06-20 15:00:00 +0200

答案 1 :(得分:4)

出于好奇,试图在4个LOC中重新发明chronic:)

["3 on Jun 20", "Jun 20 at 3", "Jun 20 at 300"].map do |dt|
  d, t = dt.split(/\s+at\s+/i)
  t, d = dt.split(/\s+on\s+/i) unless t
  return [dt] unless t && d

  t = t[0..-3] + (t[-2..-1] ? ":" << t[-2..-1] : t[/.{,2}\z/] + ":00")
  [d, t] # [["Jun 20", "3:00"], ["Jun 20", "3:00"], ["Jun 20", "3:00"]]
end.map { |dt| DateTime.parse dt.join ' ' }

答案 2 :(得分:1)

使用strptime解析自定义格式:

DateTime.strptime("3 on Jun 20", "%H on %b %d")

https://ruby-doc.org/stdlib-2.5.0/libdoc/date/rdoc/DateTime.html#method-c-strptime