2013-05-07 84 views
2

我有从Rails 2.2.2迁移到Rails 3.2.1的网站。Rails 3中的日期操作3

我现在看到与一个自定义方法调用相关的奇怪日期问题。

我有一个返回格式MM/DD/YYYY

def clean_date date 
    return "00/00/00" if !date or date == "" 
    return date.strftime("%m/%d/%Y") if date.class.to_s == "Date" 
    return Date.parse(date).strftime("%m/%d/%Y") # assume it's a string 
    end 

后,我搬到了Rails 3中,它停止返回正确格式的日期指定日期的方法。它现在返回一个MySQL型日期格式

>>> SHIP DATE BEFORE CLEAN: 12/24/2013 
>>> SHIP DATE AFTER CLEAN: 2013-12-24 

呼叫控制器

require 'date' 

[...] 

## In: 12/24/2013 
existing_ship_date = clean_date(poi.ship_date) 
## Out: 2013-12-24 
## Should always return: 12/24/2013 

我怎样才能解决这个问题的方法,例如,它的作品使用Rails 3.2.1吗?

感谢您的期待

+0

我不明白为什么这个函数会以该格式返回日期。您使用的是哪个版本的Ruby? poi.ship_date的数据类型是什么?最后,函数中的哪个return语句正在执行?也许在函数中添加一些日志语句,以便我们知道该函数正在被采用的分支。 – 2013-05-07 19:31:16

+0

poi.ship_date是格式为YYYY-MM-DD的日期,因此Date.parse(date).strftime(“%m /%d /%Y”)不会将输入值更改为MM/DD/YYYY;它只是通过它 – Slinky 2013-05-08 13:20:19

回答

1

尝试使用替代日期解析器。在那里

rails_app_root_directory/config/initializers/date_formats.rb

2.Put您的日期格式::我发现了很多价值,从这个宝石:

https://github.com/mojombo/chronic

+0

这工作得很好。谢谢 – Slinky 2013-05-08 13:14:25

0

1,创建这个文件

Date::DATE_FORMATS[:ship_date] = "%m/%d/%Y"

3.在您的控制器中根据需要使用它来格式化Date对象:

Date.today.to_formatted_s(:ship_date)

输出: “2013年5月7日”

4.Don't忘记重启轨道!

+0

感谢您的支持。在我看到您的解决方案之前,我将Gem Chronic与正确插入方法调用的代码一起使用,因此更少的代码来维护它始终是件好事。 – Slinky 2013-05-08 13:17:03