【发布时间】:2023-03-17 11:00:01
【问题描述】:
我目前正在尝试检查两个日期时间范围是否重叠。我有两个问题
首先,重叠总是返回 false,即使我一遍又一遍地提交相同的开始时间,持续时间为 1 小时(即开始时间是下午 3 点,结束时间是下午 4 点,重复提交总是会创建一个没有通过重叠返回真实声明并返回一个 JSON 说明培训师已被预订)。所以 if 语句永远不会被命中。 秒,Rails 中的 Overlaps 在其方法中使用 >=,我无法将其覆盖以包含 >(端点不返回 true,即 3-4PM 和 4-5PM 不应重叠)。
如何在不包括端点的情况下检查两个日期时间并返回 true?我是否从 JSON 格式错误的日期?我的if语句错了吗?它们作为带有时区(timestampz)的日期时间存储在 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?(@start_time..@end_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(!@session_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
【问题讨论】:
-
最终使用了以下'def重叠?(x,y) (x.first - y.end) * (y.first - x.end) > 0 end'
标签: ruby-on-rails ruby json postgresql datetime