我有个问题需要回答
当前时间是7/1/2023我想在14个月后显示此日期。
有两种方法,但它们产生两种不同的结果,你能指出这种差异吗?
选项1:将14个月转换为秒,然后添加到当前日期
[22] pry(main)> (Time.zone.parse("1/7/2023") + 14.months.to_i).to_s
=> "2024-08-30 02:47:24 +0900"
选项2:将月份直接添加到当前日期
[23] pry(main)> (Time.zone.parse("1/7/2023") + 14.months).to_s
=> "2024-09-01 00:00:00 +0900"
2条答案
按热度按时间fcy6dtqo1#
首先,Time.zone不是ruby函数。
它来自rails https://api.rubyonrails.org/classes/Time.html#method-c-zone
Time.zone.parse
将导致ActiveSupport::TimeWithZone
因此,如果我们查看it类文档,
https://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-2B
如果我们看到文件,
由此看来,24.hours将准确地提前24小时,但1.day它将提前到23-25小时。因此,如果我们使用相同逻辑,如果我们将月转换为秒,它将更准确地前进
如果我错了,请纠正我,谢谢。
q3aa05252#
ActiveSupport::Duration
基于1年等于365.2425天(所谓的“平均年”)的假设实现to_i
,这是包括闰年时的平均秒数。1.month.to_i
是该值的1/12:该值相当于30.436875天或30天10小时29分6秒。
在Ruby中添加月份和将月份转换为秒之间有什么区别?
添加
1.month
只会增加time对象的 month 值,而其他所有值(day、hour、minute、second)保持不变:而加上
1.month.to_i
则使其增加上述 * 平均 * 值:相当于:
这同样适用于
14.month
与14.months.to_i
,只是14倍