datetime2epoch — convert date (possibly with specified time) to number of seconds since Epoch
The filter replaces date specification with optional time, in format of
, orMM[/-]DD[/-]YY(YY)?(:hh(:?mm(:ss)?)?)?
YYYY-MM-DD([T ]hh(:mm(:ss)?)?)?
to a number of seconds since Unix epoch.
If the year specification contains 2 digits only and is less than
50, then it is treated as an offset from year
2000, and not 1900.
In other words, 05 is understood
as year 2005,
80 is understood as
1980.
Unspecified month or day default to 01, unspecified
hours or minutes default to 00.
Example: Converting dates and times to seconds since Epoch
[filter datetime2epoch]01/01/2008[/filter] [filter datetime2epoch]01/01/08[/filter] [filter datetime2epoch]01-01-2008[/filter] [filter datetime2epoch]01-01-08[/filter] [filter datetime2epoch]01-01-2008:10[/filter] [filter datetime2epoch]01-01-08:10:45[/filter] [filter datetime2epoch]01-01-08:10:45:00[/filter]Example in action:
1199145600
1199145600
1199145600
1199145600
1199181600
1199184300
1199184300
Example: Converting ISO/MySQL dates and times to seconds since Epoch
[filter datetime2epoch]2008-01-01 10[/filter] [filter datetime2epoch]2008-01-01 10:45[/filter] [filter datetime2epoch]2008-01-01 10:45:00[/filter]Example in action:
1199181600
1199184300
1199184300
This filter is designed to replace date2time, which can
be considered deprecated.
For more information on Perl Regular Expressions, pattern matching and character classes, see perlre(1).
The timelocal() function used in the filter comes from the
Time::Local Perl module.
Interchange 5.9.0:
Source: code/Filter/datetime2epoch.filter
Lines: 46
# Copyright 2002-2007 Interchange Development Group and others
# Copyright 1996-2002 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. See the LICENSE file for details.
#
# $Id: datetime2epoch.filter,v 1.2 2007-03-30 23:40:44 pajamian Exp $
CodeDef datetime2epoch Filter
CodeDef datetime2epoch Description Date and optional time to seconds since the UNIX Epoch
CodeDef datetime2epoch Routine <<EOR
sub {
use Time::Local;
my ($year, $mon, $day, $hr, $min, $sec, $time);
my $val = shift;
$val =~ s/\0+//g;
$val =~ m%^\s*(\d\d)[-/]+(\d+)[-/]+(\d+)% and do {
($year, $mon, $day) = ($3, $1, $2);
$val =~ /:(\d\d):?(\d\d)?:?(\d\d)?\s*$/
and $time = sprintf('T%02d:%02d:%02d', $1, $2 || 0, $3 || 0);
if (length($year) < 4) {
$year =~ s/^0//;
$year = $year < 50 ? $year + 2000 : $year + 1900;
}
$val = sprintf('%d-%02d-%02d%s', $year, $mon || 1, $day || 1, $time);
};
$val =~ /^\s*(\d\d\d\d)-(\d\d)-(\d\d)(?:[T\s](\d\d)?(?::(\d\d)?(?::(\d\d)?)?)?)?/;
($year, $mon, $day, $hr, $min, $sec) = ($1, $2, $3, $4 || 0, $5 || 0,$6 || 0);
eval {
$time = timelocal($sec, $min, $hr, $day, --$mon, $year);
};
if ($@) {
logError("bad time value passed to datetime2epoch: %s", $@);
return 0;
}
return $time;
}
EOR