簡體   English   中英

Rails - 更改時間數據類型中的默認時間

[英]Rails - change default time in Time datatype

在我看來,我將按start_time訂購項目列表。 存在這樣的情況,但是,那里可能是一個start_time 1:00 AM(次日)應顯示為一個后start_time 11:00 PM(前一天)的。 由於時間數據類型存儲默認日期 2001-01-01,它認為 1:00 AM 的條目是在 2001-01-01,而不是 2001-01-02。

因此,我的問題是,有沒有辦法更改時間數據類型中的默認日期?

我想一個明顯的解決方案是將開始和結束時間存儲在 DateTime 數據類型中並輸入相應的日期。 但是,對於此應用程序,習慣上將凌晨 1:00 的開始時間稱為“屬於”前一天,因此輸入后一天的日期會造成混淆。 例如,在周五晚上參加您最喜歡的樂隊的音樂會時,他們的演出可能會在周六早上 12:30 開始,但您仍會認為音樂會在周五晚上舉行)。 感謝您的幫助。

不是對您的問題的直接回答,而是對您的問題的可能解決方案:您可以創建一個自定義排序,對時間 < 1 AM 最后進行排序。

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

通過這種方式,您可以保持 db 列不變,但可以獲得預期的音樂會順序。 除了這個凌晨 1 點的反轉,時間將按升序正常排序。

經過更多研究,似乎無法調整 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM