Skip to content
yuki-kimoto edited this page Mar 28, 2011 · 7 revisions

Convert database DATE or DATETIME format to Time::Piece object

Time::Piece is standard date and time class.

use Time::Piece;

The following filters are the ones to convert database DATE or DATETIME format to Time::Piece object

SQLite

# Time::Piece object to database DATETIME format
tp_to_datetime => sub {
    my $tp = shift;
    
    return '' unless defined $tp;
    return $tp unless ref $tp;
    return $tp->strftime('%Y-%m-%d %H:%M:%S');
},

# database DATETIME format to Time::Piece object
datetime_to_tp => sub {
    require Time::Piece;
    
    my $datetime = shift;
    
    return unless $datetime;
    return Time::Piece->localtime(
        Time::Piece->strptime($datetime, '%Y-%m-%d %H:%M:%S')
    )
},

# Time::Piece object to database DATE format
tp_to_date => sub {
    my $tp = shift;
    
    return '' unless $tp;
    return $tp unless ref $tp;
    return $tp->strftime('%Y-%m-%d');
},

# database DATE format to Time::Piece object
date_to_tp => sub {
   require Time::Piece;
   
   my $date = shift;
   
   return unless $date;
   return Time::Piece->localtime(
       Time::Piece->strptime($date, '%Y-%m-%d')
   );
},

MySQL

# Time::Piece object to database DATETIME format
tp_to_datetime => sub {
    my $tp = shift;
    
    return '0000-00-00 00:00:00' unless defined $tp;
    return $tp unless ref $tp;
    return $tp->strftime('%Y-%m-%d %H:%M:%S');
},

# database DATETIME format to Time::Piece object
datetime_to_tp => sub {
    require Time::Piece;

    my $datetime = shift;
    
    return unless defined $datetime;
    return if $datetime eq '0000-00-00 00:00:00';
    return Time::Piece->localtime(
        Time::Piece->strptime($datetime, '%Y-%m-%d %H:%M:%S')
    );
},

# Time::Piece object to database DATE format
tp_to_date => sub {
    my $tp = shift;
    
    return '0000-00-00' unless defined $tp;
    return $tp unless ref $tp;
    return $tp->strftime('%Y-%m-%d');
},

# database DATE format to Time::Piece object
date_to_tp => sub {
    require Time::Piece;

    my $date = shift;
   
    return unless defined $date;
    return if $date eq '0000-00-00';
    return Time::Piece->localtime(
        Time::Piece->strptime($date, '%Y-%m-%d')
    );
},
Clone this wiki locally