+sub _as_timestamp {
+ my $package = shift;
+ my $attribute = shift;
+ my %params = @_;
+
+ my $accessor = sub {
+ my ($precision, $self, $string) = @_;
+
+ $self->$attribute($string ? $::locale->parse_date_to_object($string) : undef) if @_ > 2;
+
+ my $dt = $self->$attribute;
+ return undef unless $dt;
+
+ $dt = DateTime->now if !ref($dt) && ($dt eq 'now');
+
+ return $::locale->format_date_object($dt, precision => $precision);
+ };
+
+ no strict 'refs';
+ *{ $package . '::' . $attribute . '_as_timestamp' } = sub { $accessor->('minute', @_) };
+ *{ $package . '::' . $attribute . '_as_timestamp_s' } = sub { $accessor->('second', @_) };
+ *{ $package . '::' . $attribute . '_as_timestamp_ms' } = sub { $accessor->('millisecond', @_) };
+
+ return 1;
+}
+
+sub _as_bool_yn {
+ my ($package, $attribute, %params) = @_;
+
+ no strict 'refs';
+ *{ $package . '::' . $attribute . '_as_bool_yn' } = sub {
+ my ($self) = @_;
+
+ if (@_ > 1) {
+ die 'not an accessor';
+ }
+
+ return !defined $self->$attribute ? ''
+ : $self->$attribute ? $::locale->text('Yes')
+ : $::locale->text('No');
+ }
+}
+