Ruby中实现Time Delta:按指定间隔拆分时间区间的方法
实现Ruby的时间区间拆分方法
time_delta 没问题,我来帮你搞定这个按间隔拆分时间区间的方法。核心思路就是把输入的时间字符串转成可操作的时间对象,然后循环累加指定间隔,同时把每个时间点格式化成你要的样式。
完整实现代码
require 'date' def time_delta(from_date_str, to_date_str, time_lapse) # 将输入的时间字符串转为DateTime对象,方便做时间运算 from_date = DateTime.parse(from_date_str) to_date = DateTime.parse(to_date_str) result = [] current_time = from_date.dup # 循环遍历每个时间间隔点,直到超过结束时间 while current_time <= to_date # 格式化为你需要的字符串样式:YYYY-MM-DD 12 AM/PM formatted_time = current_time.strftime('%Y-%m-%d %l %p').strip result << formatted_time # 累加指定的时间间隔 current_time += time_lapse end result end # 测试你的示例场景 from_date = '2018-05-18 00:00:00' to_date = '2018-05-18 23:59:59' puts time_delta(from_date, to_date, 1.hour).inspect
关键细节说明
- 时间对象转换:用
DateTime.parse把字符串转成DateTime实例,这样就能轻松做加减运算。如果是Rails项目,也可以用Time.zone.parse来处理时区,更严谨。 - 时间格式化:
strftime('%Y-%m-%d %l %p')是实现目标格式的核心:%Y:4位年份%m:2位月份%d:2位日期%l:12小时制的小时(前面会带一个空格,所以用strip去掉多余空格)%p:大写的AM/PM标识
- 循环逻辑:从起始时间开始,每次累加
time_lapse,直到当前时间超过结束时间,这样能确保覆盖所有间隔点。 - 关于
1.hour:这个是Rails ActiveSupport提供的便捷语法。如果是纯Ruby环境(没有Rails),你可以直接传入秒数(比如3600代表1小时),或者自己扩展Numeric类来支持这个写法:class Numeric def hour self * 3600 end end
运行示例代码后,你就能得到预期的结果数组:['2018-05-18 12 AM', '2018-05-18 1 AM', ..., '2018-05-18 11 PM']。
内容的提问来源于stack exchange,提问作者Sk. Irfan
相关产品推荐
相关产品推荐

