2014-12-28 77 views
-1

我目前正在嘗試檢查兩個日期時間範圍是否重疊。我有兩個問題Rails Overalps日期時間

首先,重疊總是返回false,即使我一遍又一遍地提交相同的開始時間,持續時間爲1小時(即開始時間是3PM,結束時間是4PM,並且重複提交通常會創建一個新的會話,但不會通過重疊返回true語句,並返回一個JSON,表示培訓師已被預訂)。所以if語句永遠不會被打中。 秒,軌道重疊在其方法中使用> =,我無法覆蓋它以包含>(終點不返回true,即3-4PM和4-5PM不應重疊)。

如何檢查兩個日期時間並返回true而不包含端點?我是從JSON格式錯誤的日期?我的if語句錯了嗎?它們作爲帶時區(時間戳)的日期時間存儲在postgresql中。

def create_request_iphone 

    @start_time = DateTime.parse(params[:start_time]) 
    @end_time = @start_time + params[:duration].to_f.hour 

    #logic to check if trainer is booked at that time 
    @trainer = Trainer.where(id: params[:trainers_id]).first 
    @booked_session = @trainer.session_details 

    //logic to check if trainer has booked sessions that overlap 

    @booked_session = @trainer.session_details 

    @booked_session.each do |aSession| 
    if (aSession.start_time..aSession.end_time).overlaps?(@[email protected]_time) 
     respond_to do |format| 
      msg = {:status => "FAILURE", :message => "TRAINER ALREADY BOOKED"} 
      format.json { render :json => msg } 
     end 
     return 
    end 
    end 

    @session_detail = SessionDetail.new(trainers_id: @trainer.id) 

    unless([email protected]_detail.save) 
     respond_to do |format| 
     msg = {:status => "SUCCESS", :message => @session_detail.as_json) 
     format.json { render :json => msg } # don't do msg.to_json 
     end 
    end 
    end 
+0

結束了使用以下 'DEF重疊(X,Y) ?(x.first - y.end)*(y.first - x.end)> 0 ' 末端 – DaynaJuliana

回答

-1

採用3點...Range,排除右端點。

例如:

(1..4).overlaps? (4..8) 
# => true 

(1...4).overlaps? (4..8) 
# => false 
+0

怎麼樣:(4 ... 8).overlaps?(1..4)?那不行嗎? Colud(4 ... 8).overlaps?(1 ... 4)可以在兩者上工作,即三重點? – DaynaJuliana

+0

而且它仍然總是返回true,所以這是行不通的。 IT應該返回錯誤 – DaynaJuliana

+0

抱歉,意味着它總是返回false。這可能是一個格式問題 – DaynaJuliana