将标准导轨/红宝石时间转换为美国格式 - 日期混淆

时间:2012-12-23 16:24:36

标签: ruby-on-rails ruby date datetime datepicker

我正在尝试在我的表单中转换YYYY-MM-DD格式并将视图显示为MM / DD / YYYY - 这是一种非常标准的美国日期格式。不确定如何解决这个问题 - 我认为在/ show中的日期实例上调用.strftime("%m/%d/%Y")就可以了。非常困惑 - 找不到解释如何转换实际有意义的日期的文档。我正在关注这个railscast:http://railscasts.com/episodes/213-calendars-revised

如果有帮助,我正在使用jQuery datepicker并有这个coffeescript:

jQuery ->
  $('input.datepicker').datepicker()
    dateFormat: 'mm-dd-yy'
    weekStart: 0
    autoclose: true

_form

   <%= f.label :due %><br />
   <%= f.text_field :due, { :class => 'datepicker' } %>

以上将MM / DD / YYYY格式的日期输入表格,但保存为YYYY-MM-DD

---更新/解决方案---

原来我是在正确的轨道而不是真的疯了。我的一部分问题是我遇到了一个nil对象问题,通过在我的视图中调用.try来解决这个问题,如果不是nil则只运行该方法。

.try(:strftime, "%m/%d/%Y") 

另外 - 我安装了以下gem:gem 'american_date'自动解析日期。在展示视图中效果很好,但在表单视图中仍然可以获得YYYY-MM-DD(仅限编辑视图)。

3 个答案:

答案 0 :(得分:4)

在RoR中处理日期时,我们必须解决三个任务。我发现这些解决方案对我来说是最简单的:

1.如何正确显示日期。

安装 I18n gem并在config \ locales \ en.yml中检查日期格式。然后使用 I18n.l()(或只是l)表单帮助程序来本地化html.erb文件中的日期。

  date:
    formats:
      default: "%m/%d/%y"

2.如何以方便的方式为用户修改日期。

使用jQuery datepicker(或bootstrap datepicker等)并根据en.yml格式在jQuery小部件选项中设置日期格式。

3.如何将日期从本地化(视图)格式转换为activerecord属性。

安装 Delocalize gem并将:input子节添加到en.yml文件的date:部分。

input:
  formats:
    - :default

现在,当您指定日期时,您的日期将自动从本地化格式(mm / dd / yy)转换为数据库格式(yyyy-mm-dd)。

答案 1 :(得分:3)

我必须使用altFieldaltFormat选项才能按照说明使用此功能:

$('input.datepicker').datepicker({
   dateFormat: "mm/dd/yy", 
   altField: alt_field, 
   altFormat: "yy-mm-dd"});

这需要一个隐藏字段alt_field,它实际上以标准数据库格式保存您的日期。

答案 2 :(得分:0)

包含以下gem,它会自动将美国日期保存为db格式。

gem 'american_date'