【问题标题】:"Fuzzy" date with optional day/month带有可选日/月的“模糊”日期
【发布时间】:2013-09-15 21:45:23
【问题描述】:

我想在 Rails 应用程序中存储一些数据的日期。用户可以选择一个日期,有时它会是特定的(例如“2010 年 1 月 1 日”),但有时他只知道月份和年份(“2010 年 1 月”),甚至只知道年份(2010 年)。在 Rails 中是否有标准方法来存储(并提供输入)?我知道我可以在模型中创建 3 个单独的列,但也许有一个不错的宝石。

【问题讨论】:

  • 您必须创建 3 列和自定义读取器/写入器,因为只有一个日期列,“2010”将默认为“2010 年 1 月 1 日”。据我所知,Rails 中没有针对这种情况的内置处理程序。

标签: ruby-on-rails forms time rails-activerecord


【解决方案1】:

我创建了一个 gem 来做到这一点:

http://rubygems.org/gems/date_time_precision

例如:

require 'date_time_precision/format/string'

Date.new(2010, 1).to_s(:long)
# => "January 2010"

【讨论】:

    【解决方案2】:

    你听说过Chronic gem吗?

    这些是来自 Github 文档的一些使用示例。

    require 'chronic'
    
    Time.now   #=> Sun Aug 27 23:18:25 PDT 2006
    
    Chronic.parse('tomorrow')
      #=> Mon Aug 28 12:00:00 PDT 2006
    
    Chronic.parse('monday', :context => :past)
      #=> Mon Aug 21 12:00:00 PDT 2006
    
    Chronic.parse('this tuesday 5:00')
      #=> Tue Aug 29 17:00:00 PDT 2006
    
    Chronic.parse('this tuesday 5:00', :ambiguous_time_range => :none)
      #=> Tue Aug 29 05:00:00 PDT 2006
    
    Chronic.parse('may 27th', :now => Time.local(2000, 1, 1))
      #=> Sat May 27 12:00:00 PDT 2000
    
    Chronic.parse('may 27th', :guess => false)
      #=> Sun May 27 00:00:00 PDT 2007..Mon May 28 00:00:00 PDT 2007
    
    Chronic.parse('6/4/2012', :endian_precedence => :little)
      #=> Fri Apr 06 00:00:00 PDT 2012
    
    Chronic.parse('INVALID DATE')
      #=> nil
    

    【讨论】:

    • 这可以用于输入,但不能用于演示。例如,如果用户说某事发生在 2010 年 12 月,我应该只显示该事件的 2010 年 12 月,而不是 2010 年 12 月 1 日。
    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2012-03-30
    • 2015-10-06
    • 2020-01-29
    • 2011-09-29
    • 2021-12-09
    相关资源
    最近更新 更多