Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Generate a date stamp of today less a date interval

by grinder (Bishop)
on Dec 19, 2005 at 15:08 UTC ( #517745=snippet: print w/ replies, xml ) Need Help??

Description:

I needed to whip up a date delta (in my case, today minus 13 months) for SQL. I couldn't push the calculation onto the database, because the field in question is of type text rather than date, and converting it to a date and then subtracting the delta proved to be too expensive. Creating the date in Perl and using that is far more efficient. Don't blame me, I didn't design the schema, I just use it.

It's perhaps too-clever-by-half in that it's the most-commented bit of code I've written in some time, but I like the way it plays with list context.

use Date::Calc 'Add_Delta_YM';

my $date_limit = sprintf( '%02d-%02d-%04d',
    reverse               # Y M D --> D M Y
    Add_Delta_YM(
        sub {
            $_[5] + 1900, # year
            $_[4] +    1, # month
            $_[3],        # and day
                       0, # less this many years
                     -13, # and this many months
        }->(localtime),   # from today
    )
);
Comment on Generate a date stamp of today less a date interval
Download Code
Re: Generate a date stamp of today less a date interval
by dave0 (Friar) on Dec 20, 2005 at 04:57 UTC
    Here's another option, using the DateTime modules:
    use DateTime; my $date = DateTime->now->subtract( DateTime::Duration->new( months => 13 ) ); my $date_limit = $date->dmy;
Re: Generate a date stamp of today less a date interval
by explorer (Chaplain) on Dec 20, 2005 at 08:58 UTC
    Here you can see more modules & samples. My examples are below explorer39 user name.
Re: Generate a date stamp of today less a date interval
by TedPride (Priest) on Dec 20, 2005 at 09:58 UTC
    How about:
    SELECT SUBDATE(datefieldname, INTERVAL 13 MONTH);

    You can then format the result as needed with DATE_FORMAT(). I'm willing to bet both processes will be more efficient done through database than Perl.

    EDIT: Oops - as pointed out by grinder in PM, he already specified that the database approach wouldn't work, since the field is TEXT. Somehow I missed that. Whoever designed the table needs some serious punishment.

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://517745]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2015-07-05 09:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (61 votes), past polls