Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
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
    )
);
Replies are listed 'Best First'.
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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2023-11-28 20:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?