my $db; # local connection used to retrieve time $db = ... however you choose to connect a handle =item timestamp($timestring [, $future_flag]) =cut sub timestamp { my($time,$future) = @_; local($db->{RaiseError}) = 0; local($db->{PrintError}) = 0; # Timestamp could be absolute. my $val = scalar $db->selectrow_array(q!SELECT EXTRACT('EPOCH' FROM TIMESTAMP ?)!, undef, $time); if (defined $val) { $db->commit; return $val; } # Well, it's not, so let's try it again as a delta from today. $db->rollback; $val = scalar $db->selectrow_array(q! SELECT EXTRACT('EPOCH' FROM (TIMESTAMP 'now' + INTERVAL ?))!, { }, $time); return $val unless !defined($val) or (($val >= time) and !$future); # Hmm, that gave us nothing, or a time in the future, and the caller # didn't want that. Try one more time, using a subtraction on the # delta. $db->rollback; $val = scalar $db->selectrow_array(q! SELECT EXTRACT('EPOCH' FROM (TIMESTAMP 'now' - INTERVAL ?))!, { }, $time); return $val; }