diff --git a/lib/administrate/field/date.rb b/lib/administrate/field/date.rb index 1d17b34d9..5041ba118 100644 --- a/lib/administrate/field/date.rb +++ b/lib/administrate/field/date.rb @@ -5,7 +5,7 @@ module Field class Date < Base def date I18n.localize( - data.to_date, + data.in_time_zone(timezone).to_date, format: format ) end @@ -15,6 +15,10 @@ def date def format options.fetch(:format, :default) end + + def timezone + options.fetch(:timezone, ::Time.zone) + end end end end diff --git a/lib/administrate/field/date_time.rb b/lib/administrate/field/date_time.rb index 2263af4d2..28f4c7445 100644 --- a/lib/administrate/field/date_time.rb +++ b/lib/administrate/field/date_time.rb @@ -13,8 +13,7 @@ def date def datetime I18n.localize( data.in_time_zone(timezone), - format: format, - default: data + format: format ) end @@ -25,7 +24,7 @@ def format end def timezone - options.fetch(:timezone, ::Time.zone.name || "UTC") + options.fetch(:timezone, ::Time.zone) end end end diff --git a/lib/administrate/field/time.rb b/lib/administrate/field/time.rb index 628987d11..ff461df09 100644 --- a/lib/administrate/field/time.rb +++ b/lib/administrate/field/time.rb @@ -4,15 +4,16 @@ module Administrate module Field class Time < Base def time - return I18n.localize(data, format: format) if options[:format] - - data.strftime("%I:%M%p") + I18n.localize( + data, + format: format + ) end private def format - options[:format] + options.fetch(:format, "%I:%M%p") end end end diff --git a/spec/example_app/app/dashboards/customer_dashboard.rb b/spec/example_app/app/dashboards/customer_dashboard.rb index 79786fa4f..1ada1ceb7 100644 --- a/spec/example_app/app/dashboards/customer_dashboard.rb +++ b/spec/example_app/app/dashboards/customer_dashboard.rb @@ -17,6 +17,7 @@ class CustomerDashboard < Administrate::BaseDashboard searchable_fields: ["name"], include_blank: true ), + example_time: Field::Time, password: Field::Password } @@ -28,6 +29,7 @@ class CustomerDashboard < Administrate::BaseDashboard :email_subscriber, :kind, :territory, + :example_time, :password ].freeze diff --git a/spec/lib/fields/time_spec.rb b/spec/lib/fields/time_spec.rb index bce499469..b15a9d604 100644 --- a/spec/lib/fields/time_spec.rb +++ b/spec/lib/fields/time_spec.rb @@ -37,5 +37,35 @@ expect(field.time).to eq("04:38PM") end + + it "formats the time with localized AM/PM markers" do + time = DateTime.new(2021, 3, 26, 16, 38) + formats = { + time: { + am: "午前", + pm: "午後" + } + } + + field = Administrate::Field::Time.new(:time, time, :index) + + I18n.with_locale(:ja) do + with_translations(:ja, formats) do + expect(field.time).to eq("04:38午後") + end + end + end + + it "returns a missing translation message if the translation is not available" do + time = DateTime.new(2021, 3, 26, 16, 38) + field = Administrate::Field::Time.new(:time, time, :index) + formats = {} + + I18n.with_locale(:ja) do + with_translations(:ja, formats) do + expect(field.time).to eq("Translation missing: ja.time.pm") + end + end + end end end