从单独的字符串创建日期和时间

时间:2014-07-28 19:22:11

标签: ruby

我的Orientation模型如下所示:

  create_table "orientations", :force => true do |t|
    t.date     "class_date"
    t.text     "class_time"
    t.integer  "seats"
    t.boolean  "active",     :default => true
    t.datetime "created_at",                   :null => false
    t.datetime "updated_at",                   :null => false
  end

我想获取class_dateclass_time字段并将它们连接起来以创建一个可以与当前日期/时间进行比较的DateTime对象。我知道我可以通过以下方式解析时间:

1.9.3-p545 :022 > o.class_time
 => "9:30am" 
1.9.3-p545 :023 > Time.parse(o.class_time)
 => 2014-07-28 09:30:00 -0400 

但我不确定如何将其与班级日期结合起来。

3 个答案:

答案 0 :(得分:3)

您可以像这样结合日期和时间:

date = '2014-07-09'
time = '9:30am'

DateTime.parse([ date, time ].join(' '))
# => Wed, 09 Jul 2014 09:30:00 +0000

我已将Rails中的本地时区设置为UTC。

答案 1 :(得分:0)

parse类有类似的方法Date

pry(main)> Date.parse '2013-08-31'
=> #<Date: 2013-08-31 ((2456536j,0s,0n),+0s,2299161j)>

请注意此类方法也存在于DateTime中:

pry(main)> DateTime.parse '2013-08-31 9:30am'
=> #<DateTime: 2013-08-31T09:30:00+00:00 ((2456536j,34200s,0n),+0s,2299161j)>

您可以在我的文章Ruby for Admins: Date and Time

中了解有关Ruby日期/时间的更多信息

答案 2 :(得分:0)

你把它钉在了@tadman上。仅为后代,这是方法和电话......

在我看来......

    <% if orientation.active? and Orientation.is_not_past(orientation) %>
      <li class="class-available"><i class="fa fa-check"></i>&nbsp;
      <%= link_to orientation.class_time, new_orientation_registration_path(orientation) %>
    <% else %>
      <li class="class-closed"><i class="fa fa-minus-circle"></i>&nbsp;<%= orientation.class_time 

%GT;             &lt;%end%&gt;

在我的模特中......

  def self.is_not_past(orientation)
    date = orientation.class_date
    time = Time.parse(orientation.class_time)
    datetime = DateTime.parse([ date, time ].join(' '))
    datetime > Time.now
  end