The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

SPOPS::Tool::DateConvert - Convert dates to objects to/from your datastore

SYNOPSIS

# Class configuration with date convertion rule and metadata

my $spops = {
   class               => 'This::Class',
   isa                 => [ 'SPOPS::DBI' ],
   field               => [ 'email', 'language', 'birthtime' ],
   id_field            => 'email',
   base_table          => 'test_table',
   rules_from          => [ 'SPOPS::Tool::DateConvert' ],
   convert_date_field  => [ 'birthtime' ],
   convert_date_class  => 'Time::Piece',
   convert_date_format => '%Y-%m-%d %H:%M:%S',
};
SPOPS::Initialize->process({ config => { test => $spops } });

my $item = This::Class->fetch(55);
print "Birthdate field isa: ", ref( $item->{birthtime} ), "\n";
--> Birthdate field isa: Time::Piece

# Format some other way

print "Birthday occurred on day ", $item->{birthtime}->strftime( '%j' ),
      "which was a ", $item->{birthtime}->strftime( '%A' ), "\n";

# When creating a new object, just set the correct type of object as
# the field value

my $newborn = This::Class->new({ email     => 'foo@bar.com',
                                 language  => 'en',
                                 birthtime => Time::Piece->new });
$newborn->save;

DESCRIPTION

This SPOPS tool converts data coming from the database into a date object, and translates the date object into the proper format before it's put back into the database.

CONFIGURATION

This tool uses three configuration fields:

convert_date_field (\@)

An arrayref of fields that will be converted.

If not specified or if empty no action will be taken.

convert_date_class ($)

Class for date object to be instantiated. Supported classes are:

If not specified, 'DateTime' will be used.

convert_date_format ($)

Format (in strftime format) for date conversions. All implementations will likely use this for converting the object to a string. Some implementations (like Time::Piece and DateTime) will use this for parsing the date from the database into the date object as well.

If not specified, '%Y-%m-%d %H:%M:%S' will be used.

IMPLEMENTATIONS

DateTime

Uses the DateTime::Format::Strptime and convert_date_format to translate the date from the database.

Uses the DateTime strftime() method from along with convert_date_format configuration to translate the date into a string.

Time::Piece

Uses the strptime() method and convert_date_format to translate the date from the database.

Uses the strftime() method along with convert_date_format configuration to translate the date into a string.

Class::Date

Uses the new() method to translate the date from the database.

Uses the strftime() method along with convert_date_format configuration to translate the date into a string.

TO DO

If necessary, make this a factory and refactor if clauses into subclasses for the different implementations.

SEE ALSO

DateTime

DateTime::Format::Strptime

Time::Piece

Class::Date

AUTHOR

Chris Winters <chris@cwinters.com>