+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;
+}
+