FC2ブログ
2011
05.30

TT::Plugin::Date に iso-8601形式の日付型を食わすとエラーになる。

Category: 未分類
まずはソース嫁。
ということで、Template/Plugin/Date.pm を読んだ。

問題の日付の判定部分だが、
    if ($time =~ /^\d+$/) {
# $time is now in seconds since epoch
if ($gmt) {
@date = (gmtime($time))[0..6];
}
else {
@date = (localtime($time))[0..6];
}
}
else {
# if $time is numeric, then we assume it's seconds since the epoch
# otherwise, we try to parse it as either a 'Y:M:D H:M:S' or a
# 'H:M:S D:M:Y' string


$time =~s/T/ /g;
my @parts = (split(/(?:\/| |:|-)/, $time));

if (@parts >= 6) {
if (length($parts[0]) == 4) {
# year is first; assume 'Y:M:D H:M:S'
@date = @parts[reverse 0..5];
}
else {
# year is last; assume 'H:M:S D:M:Y'
@date = @parts[2,1,0,3..5];
}
}

if (!@date) {
return (undef, Template::Exception->new('date',
"bad time/date string: " .
"expects 'h:m:s d:m:y' got: '$time'"));
}
$date[4] -= 1; # correct month number 1-12 to range 0-11
$date[5] -= 1900; # convert absolute year to years since 1900
$time = &POSIX::mktime(@date);
}


なかなか素敵である。

日付の判別部分がなんか、うーん、いや、そういう仕様ということで的な。

てか、日付を判定するモジュールなんかありそうだけどねぇ。
探してパッチを送ってあげたほうが親切なんだろうか。

まぁ、ソースから読み取れることは、unixtime 形式か、 YYYY-MM-DD HH:MM:SS みたいな形式しかサポートされていない、ということだ。
しかも、 YY-MM-DD HH:MM:SS って書くと、意図した通りには動かず、 HH:MM:SS DD:MM:YY 形式だということになってしまう。

ので

注意しましょう!

ただ、これでは困るので、

100a101,102
>
> $time =~s/T/ /g;

とかしてやったぜ!

はいはい解決解決。


あと、ついでに言うと、utf8 flg 周りも怪しかったりするので、そのうち検証したいと思います。

スポンサーサイト




トラックバックURL
http://noriko3.blog42.fc2.com/tb.php/562-547d11c9
トラックバック
コメント
管理者にだけ表示を許可する
 
back-to-top