gpt4 book ai didi

ruby-on-rails - Rails 日期时间比较

转载 作者:行者123 更新时间:2023-12-03 09:04:52 24 4
gpt4 key购买 nike

我的应用程序提供了创建具有特定格式的开始日期和结束日期的事件的机会。事件持续时间不应超过两周,因此事件 Controller 使用 before_action 检查此条件:

def correct_time
@event = current_user.events.build(event_params)
if (@event.end_time.to_datetime - @event.start_time.to_datetime) > 2.weeks
flash[:danger] = "Attention! Events cannot last longer than 2 weeks"
redirect_to root_url
end
end

因此,当我能够创建以下持续 22 天的事件时,我感到很困惑:

>> event = Event.last
=> #<Event id: 1, user_id: 1, place: "barcelona", start_time: "2017-12-24 10:26", end_time: "2018-01-15 10:26", created_at: "2017-12-15 09:27:13", updated_at: "2017-12-15 09:27:13">

显然这个条件不起作用,因为 Rails 将天数与秒数错误:

>> (event.end_time.to_datetime - event.start_time.to_datetime)
=> (22/1)

>> (event.end_time.to_date - event.start_time.to_date) > 2.weeks
=> false

>> (event.end_time.to_datetime - event.start_time.to_datetime) == 22.days
=> false

>> (event.end_time.to_datetime - event.start_time.to_datetime) == 22.seconds
=> true

除了在上面的表达式中使用 14.seconds 而不是 2.weeks 之外,我不知道为什么会发生这种情况以及如何解决它,但这不会一定要正确。

最佳答案

为什么不只使用整数而不使用.days

(event.end_time.to_date - event.start_time.to_date) == 22 # => true

或者转换为时间对象:

(@event.end_time.to_time - @event.start_time.to_time) > 2.weeks

计算两个日期之间的天数有很多可能性,但必须使用整数进行比较:

(event.start_time.to_date..event.end_time.to_date).count > 14 

参见How can I find the number of days between two Date objects in Ruby?

关于ruby-on-rails - Rails 日期时间比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47830991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com