JpnForPhp\Converter\Converter::toWesternYear PHP Method

toWesternYear() public static method

Converts a year in Japanese format into Western format.
public static toWesternYear ( $year ) : string | array
$year : kanji or hiragana era name followed by digits, or era name in romaji, space and digit. I.e. : 明治33, めいじ33, Meiji 33
return string | array : The year(s) in Western format.
    public static function toWesternYear($year)
    {
        if (Analyzer::hasKanji($year)) {
            $key = 'kanji';
            $eraName = Helper::extractKanji($year);
            $eraName = $eraName[0];
            $eraValue = (int) Helper::subString($year, Analyzer::length($eraName), Analyzer::length($year));
        } elseif (Analyzer::hasHiragana($year)) {
            $key = 'kana';
            $eraName = Helper::extractHiragana($year);
            $eraName = $eraName[0];
            $eraValue = (int) Helper::subString($year, Analyzer::length($eraName), Analyzer::length($year));
        } else {
            $key = 'romaji';
            $year = strtolower($year);
            $parts = explode(' ', $year);
            $eraName = $parts[0];
            $eraValue = (int) $parts[1];
        }
        if (empty($eraName) || empty($eraValue)) {
            throw new Exception('Invalid year ' . $year);
        }
        $max = count(self::$mapEras);
        $westernYears = array();
        for ($i = 0; $i < $max; $i++) {
            $era = self::$mapEras[$i];
            $overflown = false;
            if (strtolower($era[$key]) == $eraName) {
                $eraStart = $era['year'];
                $westernYear = $eraStart + $eraValue - 1;
                if ($i < $max - 1) {
                    $nextEra = self::$mapEras[$i + 1];
                    $nextEraYear = $nextEra['year'];
                    if ($westernYear > $nextEraYear) {
                        $overflown = true;
                    }
                }
                $westernYears[] = array('value' => $westernYear, 'overflown' => $overflown);
            }
        }
        $results = array();
        foreach ($westernYears as $westernYear) {
            if (!$westernYear['overflown']) {
                $results[] = $westernYear['value'];
            }
        }
        if (empty($results)) {
            throw new Exception('Year ' . $year . ' is invalid');
        } elseif (count($results) == 1) {
            return $results[0];
        } else {
            return $results;
        }
    }

Usage Example

Beispiel #1
0
 public function testConversionToWesternYearKanaMeji10()
 {
     $this->setExpectedException('Exception');
     Converter::toWesternYear('めじ10');
     $this->setExpectedException(null);
 }