私は最も近い日付を表示しようとしています。配列/ハッシュから月と日を表示する
def closest_birthdate(birthdates)
sorted_dates = birthdates.sort_by do |_, value|
(DateTime.parse(value) - DateTime.now).abs
end
name, birthday = sorted_dates.first
"#{name} has his birthday on #{birthday} "
end
hash = {
'William' => '2017-09-05',
'Henk' => '2017-10-12',
'Richard' => '2017-10-10',
}
closest_birthdate(hash)
出力は次のとおりです:私は、次のコードを持っている
"William has his birthday on 2017-10-5"
方法次のように私は月と日を表示することができますか?
"William has his birthday on 10-5"
私はハッシュで年を削除しようとしましたが、私はそれを行うとコードがもう日付を認識しないと思います。あなたの代わりに `Date`インスタンスの文字列として日付を格納なぜ
を試してみてください? – Stefan
ところで、歴史的な日付を扱っているのでなければ、 'DateTime'ではなく' Time'を使うべきです(時間部分が不要な場合は 'Date'だけです)。 [いつ 'DateTimeを使うべきですか?]と' Time'をいつ使うべきですか?](http://ruby-doc.org/stdlib-2.4.2/libdoc/date/rdoc/DateTime.html#class-DateTime- – Stefan
もう1つの "BTW" - 誕生日は、通常、今年ではなく生まれた年を使って保存されます。これにより、最も近い日付を見つけるのが少し難しくなりますが、それははるかに便利です(年齢)。また、 'nearest_birthdate'は、それらが最も近い場合、最終的に過去の日付を返します。おそらく次の(つまり将来の)誕生日に興味があります。 – Stefan