MediaWikiの{{#time}}構文で扱える日付の範囲

MediaWikiの{{#time}}構文がAD110以前を扱えない。PHPのstrtotime()に依存。
0
子プロ @cpro29

もう1年以上もParserFunctionsでtrancate/floor/ceilが使えるようになってるの知らなかった……いくつか書き直せるテンプレートがありそうな感じ

2009-10-06 08:52:36
子プロ @cpro29

{{#time}} もいつの間にか1969年以前を扱えるようになってるのね。さすがにグレゴリオ暦だけのようだけど。

2009-10-06 11:17:31
子プロ @cpro29

[[Category:日付計算テンプレート]]で結構なテンプレートが自前で通算日計算をしているので#timeに置き換えてやりたいんだけど、#timeで110年以前を指定する方法がわからないので(110-1-1 は 2010年に解釈される)その辺も扱っていると下手に置き換えられない

2009-10-06 11:25:54
子プロ @cpro29

http://tinyurl.com/y8tbwcj PHP5.2以上だと DateTime クラスを使うようになっているけど、コンストラクタに文字列を渡すと strtotime() と同じようにパースされるということでいいんだろうか。PHPはなにをどう調べていいかさっぱり

2009-10-06 11:54:25
子プロ @cpro29

でもって strtotime() は32ビットのUnix timeの範囲しか扱えなかったから、2桁年を解釈できなくても問題なかったわけで。{{#time:r|2001-1-1 -2000 years}}とかして逃げられるかしら

2009-10-06 12:03:51
子プロ @cpro29

ああダメだ。計算後が110以下だと1900年代か2000年代にされちゃう。

2009-10-06 12:06:42
子プロ @cpro29

タイムスタンプも駄目。 {{#time:c|@-58664390400}} -> 0111-01-01T00:00:00+00:00 / {{#time:c|@-58664390401}} -> 2010-12-31T23:59:59+00:00

2009-10-06 12:45:42
子プロ @cpro29

紀元前はどうかと思って調べると、@-62167219200: 0年1月1日0:00 までは2000年とされ、それ以前はすべて(無効扱いなのか)1970年1月1日になる。

2009-10-06 13:27:55
子プロ @cpro29

上限は9999年の模様。9999/12/31 +1 day は1970年1月1日が帰った。

2009-10-06 13:31:05
子プロ @cpro29

結論: #timeで現状扱える範囲は 0111/01/01 - 9999/12/31 。DateTimeクラスのないPHP5.1以下だと多分2038年までだと思う。

2009-10-06 13:40:36
子プロ @cpro29

http://bit.ly/17FK39 では 100-9999年て書いちゃってるけど、環境依存だと断った方がいいんじゃないのか

2009-10-06 13:43:18