【问题标题】:Rails - change default time in Time datatypeRails - 更改时间数据类型中的默认时间
【发布时间】:2017-02-02 00:49:05
【问题描述】:

在我看来,我将按他们的start_time 订购项目列表。但是,在某些情况下,可能会出现凌晨 1:00(次日)的start_time,而该start_time(下午 11:00(前一天)。由于 Time 数据类型存储的默认日期为 2001-01-01,因此它将上午 1:00 的条目视为 2001-01-01,而不是 2001-01-02。

因此,我的问题是,有没有办法更改 Time 数据类型中的默认日期?

我想一个明显的解决方案是将开始和结束时间存储在 DateTime 数据类型中并输入相应的日期。然而,对于此应用程序,习惯上将上午 1:00 的开始时间称为“属于”前一天,因此输入第二天的日期会造成混淆。 (例如,在星期五晚上参加您最喜欢的乐队的音乐会时,他们的演出可能会在星期六早上 12:30 开始,但您仍然会认为音乐会在星期五晚上举行)。感谢您的帮助。

【问题讨论】:

  • 您已将其标记为“postgresql”,这向我表明您想要一种在数据库中实现这种排序的方法,但您还谈到了 Ruby Time 类,它不会不要参与其中。你想在数据库查询中排序还是在 Ruby 代码中排序?
  • 我对 RoR 还是比较陌生。我不确定这是否可以通过 Ruby 代码或数据库查询来处理。

标签: ruby-on-rails time


【解决方案1】:

不是直接回答您的问题,而是可能解决您的问题:您可以创建一个自定义排序,对最后

sorted_concerts = Concert.order('CASE WHEN start_time <= "2001-01-01 01:00:00" THEN 2 ELSE 1 END, start_time')

通过这种方式,您可以保留 db 列,但可以获得预期的音乐会顺序。除了这个凌晨 1 点的倒转,时间通常会按升序排序。

【讨论】:

  • 史蒂夫 - 感谢您的建议。与此同时,这当然是一项很好的工作。我仍然有兴趣找到一个更持久的解决方案,因为在某些极端情况下,音乐会在早上 7 点/8 点左右结束,而理论上某些活动可以早点开始。
  • 按照您的建议做了类似的事情。再次感谢。
【解决方案2】:

经过更多研究,似乎无法调整 Ruby 应用于存储在 Time 数据类型中的时间的默认日期“2001-01-01”。我想这回答了我的问题 - 但是 - 为了解决这个问题,我将 db 列更改为 datetime 数据类型并记录了一个默认日期,如果时间条目是在午夜之后,它将进行调整。控制器动作如下:

def create
      start_time = DateTime.parse("#{run_of_show_item_params[:date]} #{run_of_show_item_params[:start_time]}")
      end_time = DateTime.parse("#{run_of_show_item_params[:date]} #{run_of_show_item_params[:end_time]}")

      @run_of_show_item = RunOfShowItem.new(run_of_show_item_params)
      @run_of_show_item.start_time = start_time 
      @run_of_show_item.end_time = end_time
      @run_of_show_item.start_time+=1.days if run_of_show_item_params[:start_time] < "07:00"
      @run_of_show_item.end_time+=1.days if run_of_show_item_params[:start_time] < "07:00"
    if @run_of_show_item.save
      flash[:success] = "Performance added!"
      redirect_to :back
    else
      render 'new'
    end
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-26
    • 2014-02-11
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多