2015-10-19 55 views
0

我明白這一點從ActiveSupport::Duration(Rails的4.2.4 +紅寶石2.2.1):混淆的ActiveSupport ::持續時間計算結果

main > (1.month + 2.days).parts 
[[:months, 1], [:days, 2]] 

我不雖然明白這一點:

main > (1.hour + 35.minutes).parts 
[[:seconds, 3600], [:seconds, 2100]] 

ActiveSupport::Duration不按照處理月份和日期的方式處理小時和秒鐘? ActiveSupport::Duration上的文檔相當稀少(我似乎無法找到更好的文檔)。

我的主要目標是在Rails模型中存儲持續時間(小時和分鐘)。我應該忘記ActiveSupport::Duration,只需存儲秒,然後做我自己的計算?

+1

您鏈接到的文檔確實提到了「零件」。這是一個讀寫屬性。 – meagar

+1

我不確定#parts應該做什麼。我認爲你應該存儲秒並做你自己的計算。根據你想要做什麼計算,這可能相當容易,或者你可能需要使用ruby Time/Date類來幫助你。或者,也許你想存儲小時和分鐘,並做自己的計算。取決於你想要做什麼,這並不明確。如果你似乎開始知道你有多少個小時和多少分鐘,然後你想要AS :: Duration來告訴你......你有多少個小時和多少分鐘?但你已經知道了。 – jrochkind

回答

1

ActiveSupport將小時,分鐘和秒分別處理幾個月和幾天(和幾年)。

這是因爲一小時(或23分鐘)的持續時間總是精確的秒數。另一方面,一個月的時間不同,一天的時間可能有23,24或25小時,具體取決於夏令時的變化。

這聽起來像你不需要這個功能,在這種情況下存儲幾秒鐘可能會更簡單。