Hatena::Groupcatalyst

LAPISLAZULI HILL#Catalyst このページをアンテナに追加 RSSフィード

2007-10-10

[][]C::P::Datetimeのメモ1(使い方) C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst のブックマークコメント

このやり方よりCatalyst::Model::Adaptorを使った方がよいです.やりかたは404 Error - Not Foundで,DateTimeでのやり方も分かりますよ

-----

PluginというよりDateTime自体の自分メモその1

ふつうの使い方

use Catalyst qw/ DateTime /;

my $dt_now = $c->datetime; # now   2007-10-10T07:09:54
my $dt_now2 = $c->dt;      # short 2007-10-10T07:09:54
my $dt_today = $c->datetime( year => 2007, month => 10, day => 10); # 2007-10-10T00:00:00

$c->datetime->todayとかないじゃん

C::P::DateTime::Constructorを使う

  • from_epoch, today
  • from_object
  • from_day_of_year
  • last_day_of_month

というメソッドを$cに生やしてくれる

use Catalyst qw/ DateTime::Constructor /;

my $dt_today = $c->today; # 2007-10-10T00:00:00

my $from_day_of_year  = $c->from_day_of_year(  year => 2007, day_of_year => 300 ); # 2007-10-27T00:00:00
my $last_day_of_month = $c->last_day_of_month( year => 2007, month => 10); # 2007-10-31T00:00:00

アプリ用Pluginを作った方がいいかも

timezoneとか指定するのがめんどくさい.最初はC::P::DateTimeを継承しようと思ったけど,コピペしてみた.無指定時のtzはAsia/Tokyoで決め打ちにしてみた

package MyApp::Plugin::DateTime;

use strict;
use warnings;

use Catalyst::Exception;
use DateTime;

our $VERSION = "0.01";

sub datetime {
    my $c = shift;
    my %params = @_;

    my $tz = delete $params{time_zone} || 'Asia/Tokyo';

    # use params if argued
    if (%params) {
        return DateTime->new(\%params)->set_time_zone($tz);
    }
    else { # otherwise use now
        return DateTime->now(time_zone => $tz);
    }
}

sub today {
    my $c  = shift;
    my %params = @_;

    my $tz = delete $params{time_zone} || 'Asia/Tokyo';

    # use params if argued
    if (%params) {
        return DateTime->today(\%params)->set_time_zone($tz);
    }
    else { # otherwise use now
        return DateTime->today(time_zone => $tz);
    }
}

1;

これに,必要に応じて他のメソッドも生やしていくとか,timezone指定を設定から読み込むとか

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20071010