+ else {
+ ($y, $m, $d) = $ts =~ m{^(\d+)/(\d\d)/(\d\d)$};
+ croak "invalid yyyy/mm/dd date string '$ts'" unless defined $d;
+ }
+ my($cy, $cm) = ($self->year, $self->month);
+ my $first = sprintf("%04d/%02d/%02d", $cy, $cm, 1);
+ my $last = sprintf("%04d/%02d/%02d", $cy, $cm, $self->lastday);
+ my $pivot = sprintf("%04d/%02d/%02d", $y, $m, $d);
+ return -1 if $pivot gt $last;
+ return 0 if $pivot lt $first;
+ $d;
+}
+
+sub _summon_date_class {
+ my $self = shift;
+ my @tools;
+ if (my $c = $self->datetool) {
+ @tools = $c->_name;