Ruby中日期格式转换及倒计时方法‘div’报错问题求助
解决Ruby日期转换与倒计时方法错误问题
嘿,这两个问题我刚好有经验,来给你一步步解决!
1. 将「Wed, 25 Apr 2018」格式转换为「2018-04-25」
在Ruby里,我们可以借助Date库的解析和格式化方法轻松搞定:
首先需要引入date库(如果你的环境没自动加载的话),然后用Date.parse把字符串日期转成Date对象,最后用strftime输出目标格式:
require 'date' original_date = "Wed, 25 Apr 2018" parsed_date = Date.parse(original_date) formatted_date = parsed_date.strftime("%Y-%m-%d") puts formatted_date # 输出:2018-04-25
Date.parse能自动识别绝大多数常见的日期字符串格式,非常省心;strftime("%Y-%m-%d")是格式化规则:%Y代表4位年份,%m是两位月份,%d是两位日期,组合起来就是你要的「年-月-日」格式。
2. 修复倒计时方法的「undefined method `div'」错误
你遇到的报错核心原因是:你调用的起始/结束日期是字符串格式,而不是Date/DateTime对象——字符串本身没有div方法,自然会报错。
解决思路是先把字符串日期转换成Date对象,再进行时间差计算。结合你给出的代码片段,修改后的方法大概是这样:
require 'date' def event_days # 第一步:把字符串日期解析为Date对象(替换成你实际的字段名) start_date = Date.parse(self.start_date) # 比如self.en对应的起始日期字段 end_date = Date.parse(self.end_date) # 对应的结束日期字段 # 计算两个日期的天数差 days_remaining = (end_date - start_date).to_i # 如果需要更精细的倒计时(比如小时、分钟),可以用DateTime: # start_dt = DateTime.parse(self.start_date) # end_dt = DateTime.parse(self.end_date) # total_seconds = (end_dt - start_dt).to_i # days = total_seconds.div(86400) # hours = (total_seconds % 86400).div(3600) # minutes = (total_seconds % 3600).div(60) days_remaining end
这样处理后,日期对象之间的运算会返回正确的数值类型,调用div方法就不会报错了。
内容的提问来源于stack exchange,提问作者Belal Kamara
相关产品推荐
相关产品推荐

