[英]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.