2013-05-07 82 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