*

[PHP]西暦→世紀変換する

公開日: : 最終更新日:2024/01/18 RaptorPHPFramework

ss20160902
(遊戯王真DM2本編より転用+一部改変)

先日偶然家にいた姉と真DM4をやっていた。舞台設定が1480年のイングランドって言う事らしく、今までのエジプトとか日本はどこへ行ったのやらっていう、そんなOPで大爆笑してしまった。
その際に姉が15世紀の話なんだねって言った時に特定の西暦が何世紀かって覚えてんのねって感心したらゲームのOP以上に大爆笑された。

ss201609022
↑問題のシーン(遊戯王真DM2本編より転用)

曰く、それで今までよく生きてこれたなとか。

調べたら計算方法がある。
下二桁が00、要するに100の倍数の年でなければ百の位と千の位までの数値に+1した数値がその世紀であるという事だ。
例えば問題のシーンの1480年代なら14+1で15世紀。
800年なら8世紀、820年なら9世紀。
1900年なら19世紀、1901年なら20世紀っていう事。
99年以前なら1世紀という事らしい。

それを踏まえてかなり雑だがPHPコードを書いてみた。

class checkCentury{
	function convertToYearForCentury($checkYear){
	    //半角数値以外の不純物をカットする
	    $checkYear = intval($checkYear);
	    //半角の整数が残ったら処理を続行
	    if($checkYear){
		    //100年以内なら1世紀と返す
		    if($checkYear < 101){
				$returnValue = 1;
		    }else{
		    	//101年以降ならば1/100した数値を取得
		    	$returnValue = floor($checkYear/100);
		    }
			//ちょうど100年代じゃなかったら1プラスする
			if($checkYear %100 != 0){
			   $returnValue = $returnValue + 1;
			}
	     	return $returnValue;
	    }
	}
}

使うとき

$checkCentury = new checkCentury();
echo $checkCentury->convertToYearForCentury(1901) . "世紀";

この場合は20世紀と表示される。
Wikiにもちゃんと20世紀って書いてあるしね。

しかし、日本に住んでる限り西暦から和暦に(またはその逆)変換する事はあっても西暦から何世紀かなんて判断する事ってなかなかないと思う。
学生時代のテストとかでも見た事ないわ!
歴史に関係のあるシステムとか作る時に役に立つのだろうか。
このプログラムコードだと紀元前を計算してくれって言われたら対応できないのでそれはまた後日。

…………ちなみにうちの会社では西暦から何世紀か判断しろって言ったら4人中3人が回答できなかった。
それが普通の回答だと思うんだがなァ。

2016/9/2日投稿当時のコード


class checkCentury{
  function checkCenturyYear($checkYear){
    //半角数値以外の不純物をカットする
    $checkYear = intval($checkYear);
    //半角の整数が残ったら処理を続行
    if($checkYear){
      //桁数によって抽出箇所を変更
      switch (strlen($checkYear)) {
        //4桁より上ならエラーを返す
        case strlen($checkYear) > 4: 
          $returnValue = false;
          break;
        case 4:
          $returnValue = substr($checkYear, 0, 2);
          break;
          case 3:
          $returnValue = substr($checkYear, 0, 1);
          break;
        default:
            $returnValue = 1;
          break;
      }
      //ちょうど100年代じゃなかったら1プラスする
      if($checkYear %100 != 0 && strlen($checkYear) <= 4){
        $returnValue = $returnValue + 1;
      }
      return $returnValue;
    }
  }
}

使う時

$checkCentury = new checkCentury();
echo $checkCentury->checkCenturyYear(1901) . "世紀";

やってることはほぼ一緒なのだが、
4桁なら先頭の2桁、3ケタなら先頭の1桁だけ、5ケタ以上ならエラーが返ってくる仕組みになっている。
しかし、よくよく考えたら先頭二桁(一桁)を取った数字って事はわざわざ抽出個所を指定しなくても調べたい年数から切り捨てした1/100の数字がそれって事じゃんっていう事に気づいた。

こんなの小学生でもわかる算数のレベルだろ…………………………
流石、高校時代100点満点中で2桁以上の点数を取ったことのないプログラマは違うね。

まあ、10000年とか今から数えても7000年後の話だからそれまでPHPが使われているかと言うと甚だ疑問ではあるが、エラーが返ってくるっていうスクリプト自体がスマートじゃなくてなんか嫌だった、。

関連記事

[RaptorsFramework][PHP]リクエストをオブジェクト化する

RaptorFrameworkだけどネーミングに既に先客がいた。 どうしてもラプターって言う単語だ

記事を読む

[RaptorsFramework][PHP]DB接続

前回に引き続きRaptorFrameworkの作業を続ける。 Coreファイルをゴリゴリ追加し

記事を読む

no image

[php]どの数値の倍数かどうかを判定する

俺はPHPでクラス関数を開発した人の事は全力で称えたい PHPでどの数値の倍数かどうかを判定す

記事を読む

フレームワークを作ってみる。

このブログ。元々PHPの学習状況を報告する為の場所だったんだが、いつの間にか遊びの報告しかしてない事

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

マスターデュエル事情

いやあ、皆強いね。旋風BF環境以降、コレクターとしてカードゲームと付

改造30MS ユリア

改造30MSユリア姫。 バンダイから発売されているプラ

エクシーズ×リンクフェスティバルレポ

報酬を全部集めたわけではないが、とりあえずミッション分は完走

MD魔術師S23レポ

前回の記事を書いた時からデビューしたマスターデュエル。ただ、

マスターデュエルにてやっとプラチナに上がれた話

ネットの友人にモチベを掛けられてマスターデュエル参入。リンク

→もっと見る

PAGE TOP ↑