コロナワクチン大規模接種の予約システムの話題に寄せてw
<?php
setlocale(LC_TIME, 'ja_JP.utf8');
for($i=1901; $i <= date('Y') - 65; $i++){
$options[] = sprintf("%s年(%s)", $i, substr(strftime('%Ex', mktime(0, 0, 0, 12, 25, $i)), 0, -10));
}
var_dump($options);
?>
array(56) {
[0]=>
string(24) "1901年(明治34年)"
[1]=>
string(24) "1902年(明治35年)"
[2]=>
string(24) "1903年(明治36年)"
[3]=>
string(24) "1904年(明治37年)"
[4]=>
string(24) "1905年(明治38年)"
[5]=>
string(24) "1906年(明治39年)"
[6]=>
string(24) "1907年(明治40年)"
[7]=>
string(24) "1908年(明治41年)"
[8]=>
string(24) "1909年(明治42年)"
[9]=>
string(24) "1910年(明治43年)"
[10]=>
string(24) "1911年(明治44年)"
[11]=>
string(25) "1912年(大正元年)"
[12]=>
string(23) "1913年(大正2年)"
[13]=>
string(23) "1914年(大正3年)"
[14]=>
string(23) "1915年(大正4年)"
[15]=>
string(23) "1916年(大正5年)"
[16]=>
string(23) "1917年(大正6年)"
[17]=>
string(23) "1918年(大正7年)"
[18]=>
string(23) "1919年(大正8年)"
[19]=>
string(23) "1920年(大正9年)"
[20]=>
string(24) "1921年(大正10年)"
[21]=>
string(24) "1922年(大正11年)"
[22]=>
string(24) "1923年(大正12年)"
[23]=>
string(24) "1924年(大正13年)"
[24]=>
string(24) "1925年(大正14年)"
[25]=>
string(25) "1926年(昭和元年)"
[26]=>
string(23) "1927年(昭和2年)"
[27]=>
string(23) "1928年(昭和3年)"
[28]=>
string(23) "1929年(昭和4年)"
[29]=>
string(23) "1930年(昭和5年)"
[30]=>
string(23) "1931年(昭和6年)"
[31]=>
string(23) "1932年(昭和7年)"
[32]=>
string(23) "1933年(昭和8年)"
[33]=>
string(23) "1934年(昭和9年)"
[34]=>
string(24) "1935年(昭和10年)"
[35]=>
string(24) "1936年(昭和11年)"
[36]=>
string(24) "1937年(昭和12年)"
[37]=>
string(24) "1938年(昭和13年)"
[38]=>
string(24) "1939年(昭和14年)"
[39]=>
string(24) "1940年(昭和15年)"
[40]=>
string(24) "1941年(昭和16年)"
[41]=>
string(24) "1942年(昭和17年)"
[42]=>
string(24) "1943年(昭和18年)"
[43]=>
string(24) "1944年(昭和19年)"
[44]=>
string(24) "1945年(昭和20年)"
[45]=>
string(24) "1946年(昭和21年)"
[46]=>
string(24) "1947年(昭和22年)"
[47]=>
string(24) "1948年(昭和23年)"
[48]=>
string(24) "1949年(昭和24年)"
[49]=>
string(24) "1950年(昭和25年)"
[50]=>
string(24) "1951年(昭和26年)"
[51]=>
string(24) "1952年(昭和27年)"
[52]=>
string(24) "1953年(昭和28年)"
[53]=>
string(24) "1954年(昭和29年)"
[54]=>
string(24) "1955年(昭和30年)"
[55]=>
string(24) "1956年(昭和31年)"
}
Linuxだとsetlocale()
が有効。macOSだと無効。mtkime()
に12/25を渡しているのは、明治・大正、大正・昭和の改元に対応するため。このままだと平成と令和は不可。元号判定や「元年」表示など、strftime()
がやってくれる。
追記:Azure上のUbuntuだとちょっと設定が必要。
$ sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
$ php -r 'setlocale(LC_TIME,"ja_JP.UTF-8"); echo(strftime("%Ec", mktime(0,0,0,1,1,2021)));'
令和03年01月01日 00時00分00秒