ruby-on-rails - Rails 4 - 将字符串转换为时间格式,除非格式已经正确

标签 ruby-on-rails ruby ruby-on-rails-4 callback

我正在尝试弄清楚如何将字符串转换为时间格式,前提是它的格式不正确。

我当前的设置:

我有一个保存前的回调

before_save :format_time 

def format_time
  self.from_time = from_time.to_time.strftime("%H %M")
  self.to_time   = to_time.to_time.strftime("%H %M")
end

这是格式化用户输入时间的两个字符串。

如果用户输入 2:00 PM,回调会将其保存为 14 00

问题是如果用户更新模型,回调会将 14 00 变成 00 00

因此,我想检查格式是否已经是它应该的样子。不确定解决此问题的最佳方法。谢谢!

最佳答案

试试这个:

before_save :format_time 

def format_time
  self.from_time = sanitize_time( from_time )
  self.to_time   = sanitize_time( to_time )
end

def sanitize_time( time_str )
  begin
    DateTime.strptime(time_str, '%H %M') # will raise ArgumentError if not in '%H %M' format
    time_str
  rescue ArgumentError
    time_str.to_time.strftime("%H %M")
  end
end

关于ruby-on-rails - Rails 4 - 将字符串转换为时间格式,除非格式已经正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804037/

相关文章:

ruby-on-rails - 没有 InnoDB,Rails 3 不能在 MySQL MyISAM 模式下运行吗?

ruby-on-rails - 我如何在 Ruby/Rails 中获得每月的第一个星期四?

ruby - 使用 Nokogiri 提取链接时如何获取绝对 URL?

javascript - Rails 中奇怪的 JSON Javascript 问题

ruby-on-rails - 从 ActiveRecord 实例中访问 RoR ActiveRecord 的属性

arrays - 正则表达式匹配给定数据中的最后一个值

ruby-on-rails - 如何禁用 Rails 4 中的部分更新?

css - 使用 TinyMCE 在 rails 4 中渲染 css

ruby-on-rails - Rails 4 Devise 嵌套表单无法批量分配 protected 属性

ruby-on-rails - 使用基本身份验证集成测试 Rails API