Module: EraJa::Conversion

Included in:
Date, Time
Defined in:
lib/era_ja/conversion.rb

Constant Summary collapse

ERA_NAME_DEFAULTS =
{
  meiji:  ["M", "明治"],
  taisho: ["T", "大正"],
  showa:  ["S", "昭和"],
  heisei: ["H", "平成"]
}

Instance Method Summary collapse

Instance Method Details

#to_era(format = "%o%E.%m.%d", era_names: ERA_NAME_DEFAULTS) ⇒ String

Convert to Japanese era.

Parameters:

  • format_string (String)

    Time#strftime format string can be used

    extra format string

    • %o - era(alphabet)
    • %O - era(kanzi)
    • %E - era year
    • %J - kanzi number
  • era_names (Hash) (defaults to: ERA_NAME_DEFAULTS)

    If you want to convert custom era string(ex , h), you can set this argument. key is :meiji' or:taisho' or :showa or :heisei. value is ["alphabet era name"(ex h, s)(related to %o), "multibyte ara name"(ex , )(related to %O)]. this argument is same as one element of ERA_NAME_DEFAULTS.

Returns:

  • (String)


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/era_ja/conversion.rb', line 27

def to_era(format = "%o%E.%m.%d", era_names: ERA_NAME_DEFAULTS)
  @era_format = format.gsub(/%J/, "%J%")
  str_time = strftime(@era_format)
  if @era_format =~ /%E/
    if self.to_time < ::Time.mktime(1868,9,8)
      raise "#to_era is expeted later in 1868,9,8"
    elsif self.to_time < ::Time.mktime(1912,7,30)
      str_time = era_year(year - 1867, :meiji, era_names)
    elsif self.to_time < ::Time.mktime(1926,12,25)
      str_time = era_year(year - 1911, :taisho, era_names)
    elsif self.to_time < ::Time.mktime(1989,1,8)
      str_time = era_year(year - 1925, :showa, era_names)
    else
      str_time = era_year(year - 1988, :heisei, era_names)
    end
  end
  str_time.gsub(/%J(\d+)/) { to_kanzi($1) }
end