在 RoR 建立 Model 的時候,它會自動幫 table 補上三個欄位:id, created_at, updated_at。可以利用
而 created_at, updated_at 的 class 是 ActiveSupport::TimeWithZone,要特別注意的是每種時間 class 基準上的不同。
我們如果在頁面上這樣設計與搜尋:
而我們希望利用 created_at 搜尋到 「2011-9-16 00:00:00」 ~ 「2011-9-16 23:59:59」(不包含 2011-9-17 00:00:00) 的資料,那麼 controller 這邊應該要這樣處理。
程式碼
@start_date_year = params[:search][:start_date_year]
@start_date_month = params[:search][:start_date_month]
@start_date_day = params[:search][:start_date_day]
@end_date_year = params[:search][:end_date_year]
@end_date_month = params[:search][:end_date_month]
@end_date_day = params[:search][:end_date_day]
Model.where(
:created_at =>
("#{@start_date_year}-#{@start_date_month}-#{@start_date_day}".to_date.to_time)..
(("#{@end_date_year}-#{@end_date_month}-#{@end_date_day}".to_date + 1).to_time - 1
)
主要是利用 to_date 將字串轉換為 class Date 方便 +1 day,再利用 to_time 轉換為 class Time 方便 –1 second,此時 class Time 與 class ActiveSupport::TimeWithZone 是同一個時間基準(Date 快了 8 hours ,時區的關係),便可直接比對。
沒有留言:
張貼留言