Ruby使用strftime格式化时间时如何在分钟为0时隐藏分钟字段
解决方法
Ruby 原生的 strftime 没有内置支持「分钟为0时自动隐藏分钟部分」的格式化占位符,需要自行补充少量逻辑实现,这里提供两种常用实现方案:
方案1:条件判断(推荐)
逻辑清晰可读性高,性能无额外损耗,适合绝大多数场景:
# 可以封装为辅助方法 def format_custom_time(time) time.min.zero? ? time.strftime('%-l%P') : time.strftime('%-l:%-M%P') end # 测试效果 format_custom_time(Time.new(2021,9,19,6,0,0)) # => "6am" format_custom_time(Time.new(2021,9,19,6,30,0)) # => "6:30am"
方案2:正则替换(单行实现)
如果不想单独封装方法,可以在格式化后用正则替换掉整点的0分部分:
Time.new(2021,9,19,6,0,0).strftime('%-l:%-M%P').sub(/:0(?=[ap]m)/, '') # => "6am" Time.new(2021,9,19,6,30,0).strftime('%-l:%-M%P').sub(/:0(?=[ap]m)/, '') # => "6:30am"
如果是在 Rails 项目中使用,也可以把这个规则注册为自定义的时间格式,全局复用。
内容的提问来源于stack exchange,提问作者Chiperific
相关产品推荐
相关产品推荐

