0a1,7 > /** > * @param string $key > * @return string > */ > function getMonthName( $key ) { > return $this->getMessageFromDB( self::$mMonthMsgs[$key - 1] ); > } 1a9,846 > /** > * @return array > */ > function getMonthNamesArray() { > $monthNames = array( '' ); > for ( $i = 1; $i < 13; $i++ ) { > $monthNames[] = $this->getMonthName( $i ); > } > return $monthNames; > } > > /** > * @param string $key > * @return string > */ > function getMonthNameGen( $key ) { > return $this->getMessageFromDB( self::$mMonthGenMsgs[$key - 1] ); > } > > /** > * @param string $key > * @return string > */ > function getMonthAbbreviation( $key ) { > return $this->getMessageFromDB( self::$mMonthAbbrevMsgs[$key - 1] ); > } > > /** > * @return array > */ > function getMonthAbbreviationsArray() { > $monthNames = array( '' ); > for ( $i = 1; $i < 13; $i++ ) { > $monthNames[] = $this->getMonthAbbreviation( $i ); > } > return $monthNames; > } > > /** > * @param string $key > * @return string > */ > function getWeekdayName( $key ) { > return $this->getMessageFromDB( self::$mWeekdayMsgs[$key - 1] ); > } > > /** > * @param string $key > * @return string > */ > function getWeekdayAbbreviation( $key ) { > return $this->getMessageFromDB( self::$mWeekdayAbbrevMsgs[$key - 1] ); > } > > /** > * @param string $key > * @return string > */ > function getIranianCalendarMonthName( $key ) { > return $this->getMessageFromDB( self::$mIranianCalendarMonthMsgs[$key - 1] ); > } > > /** > * @param string $key > * @return string > */ > function getHebrewCalendarMonthName( $key ) { > return $this->getMessageFromDB( self::$mHebrewCalendarMonthMsgs[$key - 1] ); > } > > /** > * @param string $key > * @return string > */ > function getHebrewCalendarMonthNameGen( $key ) { > return $this->getMessageFromDB( self::$mHebrewCalendarMonthGenMsgs[$key - 1] ); > } > > /** > * @param string $key > * @return string > */ > function getHijriCalendarMonthName( $key ) { > return $this->getMessageFromDB( self::$mHijriCalendarMonthMsgs[$key - 1] ); > } > > /** > * This is a workalike of PHP's date() function, but with better > * internationalisation, a reduced set of format characters, and a better > * escaping format. > * > * Supported format characters are dDjlNwzWFmMntLoYyaAgGhHiscrUeIOPTZ. See > * the PHP manual for definitions. There are a number of extensions, which > * start with "x": > * > * xn Do not translate digits of the next numeric format character > * xN Toggle raw digit (xn) flag, stays set until explicitly unset > * xr Use roman numerals for the next numeric format character > * xh Use hebrew numerals for the next numeric format character > * xx Literal x > * xg Genitive month name > * > * xij j (day number) in Iranian calendar > * xiF F (month name) in Iranian calendar > * xin n (month number) in Iranian calendar > * xiy y (two digit year) in Iranian calendar > * xiY Y (full year) in Iranian calendar > * > * xjj j (day number) in Hebrew calendar > * xjF F (month name) in Hebrew calendar > * xjt t (days in month) in Hebrew calendar > * xjx xg (genitive month name) in Hebrew calendar > * xjn n (month number) in Hebrew calendar > * xjY Y (full year) in Hebrew calendar > * > * xmj j (day number) in Hijri calendar > * xmF F (month name) in Hijri calendar > * xmn n (month number) in Hijri calendar > * xmY Y (full year) in Hijri calendar > * > * xkY Y (full year) in Thai solar calendar. Months and days are > * identical to the Gregorian calendar > * xoY Y (full year) in Minguo calendar or Juche year. > * Months and days are identical to the > * Gregorian calendar > * xtY Y (full year) in Japanese nengo. Months and days are > * identical to the Gregorian calendar > * > * Characters enclosed in double quotes will be considered literal (with > * the quotes themselves removed). Unmatched quotes will be considered > * literal quotes. Example: > * > * "The month is" F => The month is January > * i's" => 20'11" > * > * Backslash escaping is also supported. > * > * Input timestamp is assumed to be pre-normalized to the desired local > * time zone, if any. Note that the format characters crUeIOPTZ will assume > * $ts is UTC if $zone is not given. > * > * @param string $format > * @param string $ts 14-character timestamp > * YYYYMMDDHHMMSS > * 01234567890123 > * @param DateTimeZone $zone Timezone of $ts > * @todo handling of "o" format character for Iranian, Hebrew, Hijri & Thai? > * > * @throws MWException > * @return string > */ > function sprintfDate( $format, $ts, DateTimeZone $zone = null ) { > $s = ''; > $raw = false; > $roman = false; > $hebrewNum = false; > $dateTimeObj = false; > $rawToggle = false; > $iranian = false; > $hebrew = false; > $hijri = false; > $thai = false; > $minguo = false; > $tenno = false; > > if ( strlen( $ts ) !== 14 ) { > throw new MWException( __METHOD__ . ": The timestamp $ts should have 14 characters" ); > } > > if ( !ctype_digit( $ts ) ) { > throw new MWException( __METHOD__ . ": The timestamp $ts should be a number" ); > } > > $formatLength = strlen( $format ); > for ( $p = 0; $p < $formatLength; $p++ ) { > $num = false; > $code = $format[$p]; > if ( $code == 'x' && $p < $formatLength - 1 ) { > $code .= $format[++$p]; > } > > if ( ( $code === 'xi' > || $code === 'xj' > || $code === 'xk' > || $code === 'xm' > || $code === 'xo' > || $code === 'xt' ) > && $p < $formatLength - 1 ) { > $code .= $format[++$p]; > } > > switch ( $code ) { > case 'xx': > $s .= 'x'; > break; > case 'xn': > $raw = true; > break; > case 'xN': > $rawToggle = !$rawToggle; > break; > case 'xr': > $roman = true; > break; > case 'xh': > $hebrewNum = true; > break; > case 'xg': > $s .= $this->getMonthNameGen( substr( $ts, 4, 2 ) ); > break; > case 'xjx': > if ( !$hebrew ) { > $hebrew = self::tsToHebrew( $ts ); > } > $s .= $this->getHebrewCalendarMonthNameGen( $hebrew[1] ); > break; > case 'd': > $num = substr( $ts, 6, 2 ); > break; > case 'D': > if ( !$dateTimeObj ) { > $dateTimeObj = DateTime::createFromFormat( > 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' ) > ); > } > $s .= $this->getWeekdayAbbreviation( $dateTimeObj->format( 'w' ) + 1 ); > break; > case 'j': > $num = intval( substr( $ts, 6, 2 ) ); > break; > case 'xij': > if ( !$iranian ) { > $iranian = self::tsToIranian( $ts ); > } > $num = $iranian[2]; > break; > case 'xmj': > if ( !$hijri ) { > $hijri = self::tsToHijri( $ts ); > } > $num = $hijri[2]; > break; > case 'xjj': > if ( !$hebrew ) { > $hebrew = self::tsToHebrew( $ts ); > } > $num = $hebrew[2]; > break; > case 'l': > if ( !$dateTimeObj ) { > $dateTimeObj = DateTime::createFromFormat( > 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' ) > ); > } > $s .= $this->getWeekdayName( $dateTimeObj->format( 'w' ) + 1 ); > break; > case 'F': > $s .= $this->getMonthName( substr( $ts, 4, 2 ) ); > break; > case 'xiF': > if ( !$iranian ) { > $iranian = self::tsToIranian( $ts ); > } > $s .= $this->getIranianCalendarMonthName( $iranian[1] ); > break; > case 'xmF': > if ( !$hijri ) { > $hijri = self::tsToHijri( $ts ); > } > $s .= $this->getHijriCalendarMonthName( $hijri[1] ); > break; > case 'xjF': > if ( !$hebrew ) { > $hebrew = self::tsToHebrew( $ts ); > } > $s .= $this->getHebrewCalendarMonthName( $hebrew[1] ); > break; > case 'm': > $num = substr( $ts, 4, 2 ); > break; > case 'M': > $s .= $this->getMonthAbbreviation( substr( $ts, 4, 2 ) ); > break; > case 'n': > $num = intval( substr( $ts, 4, 2 ) ); > break; > case 'xin': > if ( !$iranian ) { > $iranian = self::tsToIranian( $ts ); > } > $num = $iranian[1]; > break; > case 'xmn': > if ( !$hijri ) { > $hijri = self::tsToHijri ( $ts ); > } > $num = $hijri[1]; > break; > case 'xjn': > if ( !$hebrew ) { > $hebrew = self::tsToHebrew( $ts ); > } > $num = $hebrew[1]; > break; > case 'xjt': > if ( !$hebrew ) { > $hebrew = self::tsToHebrew( $ts ); > } > $num = $hebrew[3]; > break; > case 'Y': > $num = substr( $ts, 0, 4 ); > break; > case 'xiY': > if ( !$iranian ) { > $iranian = self::tsToIranian( $ts ); > } > $num = $iranian[0]; > break; > case 'xmY': > if ( !$hijri ) { > $hijri = self::tsToHijri( $ts ); > } > $num = $hijri[0]; > break; > case 'xjY': > if ( !$hebrew ) { > $hebrew = self::tsToHebrew( $ts ); > } > $num = $hebrew[0]; > break; > case 'xkY': > if ( !$thai ) { > $thai = self::tsToYear( $ts, 'thai' ); > } > $num = $thai[0]; > break; > case 'xoY': > if ( !$minguo ) { > $minguo = self::tsToYear( $ts, 'minguo' ); > } > $num = $minguo[0]; > break; > case 'xtY': > if ( !$tenno ) { > $tenno = self::tsToYear( $ts, 'tenno' ); > } > $num = $tenno[0]; > break; > case 'y': > $num = substr( $ts, 2, 2 ); > break; > case 'xiy': > if ( !$iranian ) { > $iranian = self::tsToIranian( $ts ); > } > $num = substr( $iranian[0], -2 ); > break; > case 'a': > $s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'am' : 'pm'; > break; > case 'A': > $s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'AM' : 'PM'; > break; > case 'g': > $h = substr( $ts, 8, 2 ); > $num = $h % 12 ? $h % 12 : 12; > break; > case 'G': > $num = intval( substr( $ts, 8, 2 ) ); > break; > case 'h': > $h = substr( $ts, 8, 2 ); > $num = sprintf( '%02d', $h % 12 ? $h % 12 : 12 ); > break; > case 'H': > $num = substr( $ts, 8, 2 ); > break; > case 'i': > $num = substr( $ts, 10, 2 ); > break; > case 's': > $num = substr( $ts, 12, 2 ); > break; > case 'c': > case 'r': > case 'e': > case 'O': > case 'P': > case 'T': > // Pass through string from $dateTimeObj->format() > if ( !$dateTimeObj ) { > $dateTimeObj = DateTime::createFromFormat( > 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' ) > ); > } > $s .= $dateTimeObj->format( $code ); > break; > case 'w': > case 'N': > case 'z': > case 'W': > case 't': > case 'L': > case 'o': > case 'U': > case 'I': > case 'Z': > // Pass through number from $dateTimeObj->format() > if ( !$dateTimeObj ) { > $dateTimeObj = DateTime::createFromFormat( > 'YmdHis', $ts, $zone ?: new DateTimeZone( 'UTC' ) > ); > } > $num = $dateTimeObj->format( $code ); > break; > case '\\': > # Backslash escaping > if ( $p < $formatLength - 1 ) { > $s .= $format[++$p]; > } else { > $s .= '\\'; > } > break; > case '"': > # Quoted literal > if ( $p < $formatLength - 1 ) { > $endQuote = strpos( $format, '"', $p + 1 ); > if ( $endQuote === false ) { > # No terminating quote, assume literal " > $s .= '"'; > } else { > $s .= substr( $format, $p + 1, $endQuote - $p - 1 ); > $p = $endQuote; > } > } else { > # Quote at end of string, assume literal " > $s .= '"'; > } > break; > default: > $s .= $format[$p]; > } > if ( $num !== false ) { > if ( $rawToggle || $raw ) { > $s .= $num; > $raw = false; > } elseif ( $roman ) { > $s .= Language::romanNumeral( $num ); > $roman = false; > } elseif ( $hebrewNum ) { > $s .= self::hebrewNumeral( $num ); > $hebrewNum = false; > } else { > $s .= $this->formatNum( $num, true ); > } > } > } > > return $s; > } > > private static $GREG_DAYS = array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); > private static $IRANIAN_DAYS = array( 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 ); > > /** > * Algorithm by Roozbeh Pournader and Mohammad Toossi to convert > * Gregorian dates to Iranian dates. Originally written in C, it > * is released under the terms of GNU Lesser General Public > * License. Conversion to PHP was performed by Niklas Laxström. > * > * Link: http://www.farsiweb.info/jalali/jalali.c > * > * @param string $ts > * > * @return string > */ > private static function tsToIranian( $ts ) { > $gy = substr( $ts, 0, 4 ) -1600; > $gm = substr( $ts, 4, 2 ) -1; > $gd = substr( $ts, 6, 2 ) -1; > > # Days passed from the beginning (including leap years) > $gDayNo = 365 * $gy > + floor( ( $gy + 3 ) / 4 ) > - floor( ( $gy + 99 ) / 100 ) > + floor( ( $gy + 399 ) / 400 ); > > // Add days of the past months of this year > for ( $i = 0; $i < $gm; $i++ ) { > $gDayNo += self::$GREG_DAYS[$i]; > } > > // Leap years > if ( $gm > 1 && ( ( $gy % 4 === 0 && $gy % 100 !== 0 || ( $gy % 400 == 0 ) ) ) ) { > $gDayNo++; > } > > // Days passed in current month > $gDayNo += (int)$gd; > > $jDayNo = $gDayNo - 79; > > $jNp = floor( $jDayNo / 12053 ); > $jDayNo %= 12053; > > $jy = 979 + 33 * $jNp + 4 * floor( $jDayNo / 1461 ); > $jDayNo %= 1461; > > if ( $jDayNo >= 366 ) { > $jy += floor( ( $jDayNo - 1 ) / 365 ); > $jDayNo = floor( ( $jDayNo - 1 ) % 365 ); > } > > for ( $i = 0; $i < 11 && $jDayNo >= self::$IRANIAN_DAYS[$i]; $i++ ) { > $jDayNo -= self::$IRANIAN_DAYS[$i]; > } > > $jm = $i + 1; > $jd = $jDayNo + 1; > > return array( $jy, $jm, $jd ); > } > > /** > * Converting Gregorian dates to Hijri dates. > * > * Based on a PHP-Nuke block by Sharjeel which is released under GNU/GPL license > * > * @see http://phpnuke.org/modules.php?name=News&file=article&sid=8234&mode=thread&order=0&thold=0 > * > * @param string $ts > * > * @return string > */ > private static function tsToHijri( $ts ) { > $year = substr( $ts, 0, 4 ); > $month = substr( $ts, 4, 2 ); > $day = substr( $ts, 6, 2 ); > > $zyr = $year; > $zd = $day; > $zm = $month; > $zy = $zyr; > > if ( > ( $zy > 1582 ) || ( ( $zy == 1582 ) && ( $zm > 10 ) ) || > ( ( $zy == 1582 ) && ( $zm == 10 ) && ( $zd > 14 ) ) > ) { > $zjd = (int)( ( 1461 * ( $zy + 4800 + (int)( ( $zm - 14 ) / 12 ) ) ) / 4 ) + > (int)( ( 367 * ( $zm - 2 - 12 * ( (int)( ( $zm - 14 ) / 12 ) ) ) ) / 12 ) - > (int)( ( 3 * (int)( ( ( $zy + 4900 + (int)( ( $zm - 14 ) / 12 ) ) / 100 ) ) ) / 4 ) + > $zd - 32075; > } else { > $zjd = 367 * $zy - (int)( ( 7 * ( $zy + 5001 + (int)( ( $zm - 9 ) / 7 ) ) ) / 4 ) + > (int)( ( 275 * $zm ) / 9 ) + $zd + 1729777; > } > > $zl = $zjd -1948440 + 10632; > $zn = (int)( ( $zl - 1 ) / 10631 ); > $zl = $zl - 10631 * $zn + 354; > $zj = ( (int)( ( 10985 - $zl ) / 5316 ) ) * ( (int)( ( 50 * $zl ) / 17719 ) ) + > ( (int)( $zl / 5670 ) ) * ( (int)( ( 43 * $zl ) / 15238 ) ); > $zl = $zl - ( (int)( ( 30 - $zj ) / 15 ) ) * ( (int)( ( 17719 * $zj ) / 50 ) ) - > ( (int)( $zj / 16 ) ) * ( (int)( ( 15238 * $zj ) / 43 ) ) + 29; > $zm = (int)( ( 24 * $zl ) / 709 ); > $zd = $zl - (int)( ( 709 * $zm ) / 24 ); > $zy = 30 * $zn + $zj - 30; > > return array( $zy, $zm, $zd ); > } > > /** > * Converting Gregorian dates to Hebrew dates. > * > * Based on a JavaScript code by Abu Mami and Yisrael Hersch > * (abu-mami@kaluach.net, http://www.kaluach.net), who permitted > * to translate the relevant functions into PHP and release them under > * GNU GPL. > * > * The months are counted from Tishrei = 1. In a leap year, Adar I is 13 > * and Adar II is 14. In a non-leap year, Adar is 6. > * > * @param string $ts > * > * @return string > */ > private static function tsToHebrew( $ts ) { > # Parse date > $year = substr( $ts, 0, 4 ); > $month = substr( $ts, 4, 2 ); > $day = substr( $ts, 6, 2 ); > > # Calculate Hebrew year > $hebrewYear = $year + 3760; > > # Month number when September = 1, August = 12 > $month += 4; > if ( $month > 12 ) { > # Next year > $month -= 12; > $year++; > $hebrewYear++; > } > > # Calculate day of year from 1 September > $dayOfYear = $day; > for ( $i = 1; $i < $month; $i++ ) { > if ( $i == 6 ) { > # February > $dayOfYear += 28; > # Check if the year is leap > if ( $year % 400 == 0 || ( $year % 4 == 0 && $year % 100 > 0 ) ) { > $dayOfYear++; > } > } elseif ( $i == 8 || $i == 10 || $i == 1 || $i == 3 ) { > $dayOfYear += 30; > } else { > $dayOfYear += 31; > } > } > > # Calculate the start of the Hebrew year > $start = self::hebrewYearStart( $hebrewYear ); > > # Calculate next year's start > if ( $dayOfYear <= $start ) { > # Day is before the start of the year - it is the previous year > # Next year's start > $nextStart = $start; > # Previous year > $year--; > $hebrewYear--; > # Add days since previous year's 1 September > $dayOfYear += 365; > if ( ( $year % 400 == 0 ) || ( $year % 100 != 0 && $year % 4 == 0 ) ) { > # Leap year > $dayOfYear++; > } > # Start of the new (previous) year > $start = self::hebrewYearStart( $hebrewYear ); > } else { > # Next year's start > $nextStart = self::hebrewYearStart( $hebrewYear + 1 ); > } > > # Calculate Hebrew day of year > $hebrewDayOfYear = $dayOfYear - $start; > > # Difference between year's days > $diff = $nextStart - $start; > # Add 12 (or 13 for leap years) days to ignore the difference between > # Hebrew and Gregorian year (353 at least vs. 365/6) - now the > # difference is only about the year type > if ( ( $year % 400 == 0 ) || ( $year % 100 != 0 && $year % 4 == 0 ) ) { > $diff += 13; > } else { > $diff += 12; > } > > # Check the year pattern, and is leap year > # 0 means an incomplete year, 1 means a regular year, 2 means a complete year > # This is mod 30, to work on both leap years (which add 30 days of Adar I) > # and non-leap years > $yearPattern = $diff % 30; > # Check if leap year > $isLeap = $diff >= 30; > > # Calculate day in the month from number of day in the Hebrew year > # Don't check Adar - if the day is not in Adar, we will stop before; > # if it is in Adar, we will use it to check if it is Adar I or Adar II > $hebrewDay = $hebrewDayOfYear; > $hebrewMonth = 1; > $days = 0; > while ( $hebrewMonth <= 12 ) { > # Calculate days in this month > if ( $isLeap && $hebrewMonth == 6 ) { > # Adar in a leap year > if ( $isLeap ) { > # Leap year - has Adar I, with 30 days, and Adar II, with 29 days > $days = 30; > if ( $hebrewDay <= $days ) { > # Day in Adar I > $hebrewMonth = 13; > } else { > # Subtract the days of Adar I > $hebrewDay -= $days; > # Try Adar II > $days = 29; > if ( $hebrewDay <= $days ) { > # Day in Adar II > $hebrewMonth = 14; > } > } > } > } elseif ( $hebrewMonth == 2 && $yearPattern == 2 ) { > # Cheshvan in a complete year (otherwise as the rule below) > $days = 30; > } elseif ( $hebrewMonth == 3 && $yearPattern == 0 ) { > # Kislev in an incomplete year (otherwise as the rule below) > $days = 29; > } else { > # Odd months have 30 days, even have 29 > $days = 30 - ( $hebrewMonth - 1 ) % 2; > } > if ( $hebrewDay <= $days ) { > # In the current month > break; > } else { > # Subtract the days of the current month > $hebrewDay -= $days; > # Try in the next month > $hebrewMonth++; > } > } > > return array( $hebrewYear, $hebrewMonth, $hebrewDay, $days ); > } > > /** > * This calculates the Hebrew year start, as days since 1 September. > * Based on Carl Friedrich Gauss algorithm for finding Easter date. > * Used for Hebrew date. > * > * @param int $year > * > * @return string > */ > private static function hebrewYearStart( $year ) { > $a = intval( ( 12 * ( $year - 1 ) + 17 ) % 19 ); > $b = intval( ( $year - 1 ) % 4 ); > $m = 32.044093161144 + 1.5542417966212 * $a + $b / 4.0 - 0.0031777940220923 * ( $year - 1 ); > if ( $m < 0 ) { > $m--; > } > $Mar = intval( $m ); > if ( $m < 0 ) { > $m++; > } > $m -= $Mar; > > $c = intval( ( $Mar + 3 * ( $year - 1 ) + 5 * $b + 5 ) % 7 ); > if ( $c == 0 && $a > 11 && $m >= 0.89772376543210 ) { > $Mar++; > } elseif ( $c == 1 && $a > 6 && $m >= 0.63287037037037 ) { > $Mar += 2; > } elseif ( $c == 2 || $c == 4 || $c == 6 ) { > $Mar++; > } > > $Mar += intval( ( $year - 3761 ) / 100 ) - intval( ( $year - 3761 ) / 400 ) - 24; > return $Mar; > } > > /** > * Algorithm to convert Gregorian dates to Thai solar dates, > * Minguo dates or Minguo dates. > * > * Link: http://en.wikipedia.org/wiki/Thai_solar_calendar > * http://en.wikipedia.org/wiki/Minguo_calendar > * http://en.wikipedia.org/wiki/Japanese_era_name > * > * @param string $ts 14-character timestamp > * @param string $cName Calender name > * @return array Converted year, month, day > */ > private static function tsToYear( $ts, $cName ) { > $gy = substr( $ts, 0, 4 ); > $gm = substr( $ts, 4, 2 ); > $gd = substr( $ts, 6, 2 ); > > if ( !strcmp( $cName, 'thai' ) ) { > # Thai solar dates > # Add 543 years to the Gregorian calendar > # Months and days are identical > $gy_offset = $gy + 543; > } elseif ( ( !strcmp( $cName, 'minguo' ) ) || !strcmp( $cName, 'juche' ) ) { > # Minguo dates > # Deduct 1911 years from the Gregorian calendar > # Months and days are identical > $gy_offset = $gy - 1911; > } elseif ( !strcmp( $cName, 'tenno' ) ) { > # Nengō dates up to Meiji period > # Deduct years from the Gregorian calendar > # depending on the nengo periods > # Months and days are identical > if ( ( $gy < 1912 ) > || ( ( $gy == 1912 ) && ( $gm < 7 ) ) > || ( ( $gy == 1912 ) && ( $gm == 7 ) && ( $gd < 31 ) ) > ) { > # Meiji period > $gy_gannen = $gy - 1868 + 1; > $gy_offset = $gy_gannen; > if ( $gy_gannen == 1 ) { > $gy_offset = '元'; > } > $gy_offset = '明治' . $gy_offset; > } elseif ( > ( ( $gy == 1912 ) && ( $gm == 7 ) && ( $gd == 31 ) ) || > ( ( $gy == 1912 ) && ( $gm >= 8 ) ) || > ( ( $gy > 1912 ) && ( $gy < 1926 ) ) || > ( ( $gy == 1926 ) && ( $gm < 12 ) ) || > ( ( $gy == 1926 ) && ( $gm == 12 ) && ( $gd < 26 ) ) > ) { > # Taishō period > $gy_gannen = $gy - 1912 + 1; > $gy_offset = $gy_gannen; > if ( $gy_gannen == 1 ) { > $gy_offset = '元'; > } > $gy_offset = '大正' . $gy_offset; > } elseif ( > ( ( $gy == 1926 ) && ( $gm == 12 ) && ( $gd >= 26 ) ) || > ( ( $gy > 1926 ) && ( $gy < 1989 ) ) || > ( ( $gy == 1989 ) && ( $gm == 1 ) && ( $gd < 8 ) ) > ) { > # Shōwa period > $gy_gannen = $gy - 1926 + 1; > $gy_offset = $gy_gannen; > if ( $gy_gannen == 1 ) { > $gy_offset = '元'; > } > $gy_offset = '昭和' . $gy_offset; > } else { > # Heisei period > $gy_gannen = $gy - 1989 + 1; > $gy_offset = $gy_gannen; > if ( $gy_gannen == 1 ) { > $gy_offset = '元'; > } > $gy_offset = '平成' . $gy_offset; > } > } else { > $gy_offset = $gy; > } > > return array( $gy_offset, $gm, $gd ); > }