2012-10-29 5 views
9

ich auf einem Perl-Skript arbeite Tage zu einem Datum hinzuzufügen und die newdate anzuzeigen:Perl-Skript - füge Tage Datum neues Datum zu erhalten

use Time::ParseDate; 
use Time::CTime; 

my $date = "02/01/2003"; 
my $numdays = 30; 

my $time = parsedate($date); 

# add $numdays worth of seconds 
my $newtime = $time + ($numdays * 24 * 60 * 60); 

my $newdate = strftime("%m/%d/%Y",localtime($newtime)); 

print "$newdate\n"; 

    The output will be: 

    03/03/2003 

Nun, wie kann ich den Eingang für das Datumsfeld eingestellt yyyymmdd Ex werden: my $ date = "20030102"

auch der Ausgang sein müssen: 20030303

Dank

+0

Do Du meinst yyyyddmm als Format oder 60 als Anzahl der hinzuzufügenden Tage? Seit dem Hinzufügen von 30 Tagen zu 20030102 (2. Januar 2003) wird Sie nicht zu 20030303 (3. März 2003) – MkV

Antwort

5

Convert $ Datum aus dem Eingabeformat in dem alten Format:

$date =~ s%(....)(..)(..)%$3/$2/$1%; 

Wenn das Ausgabeformat nicht %m/%d/%Y sein sollte, dann setzen Sie es nicht zu. Sie brauchen offensichtlich %Y%m%d.

+0

Great ... Vielen Dank !!! – Gallop

9

können Sie verwenden DateTime + DateTime::Format::Strptime:

#!/usr/bin/perl 
use strict; 

use DateTime; 
use DateTime::Format::Strptime; 

my $strp = DateTime::Format::Strptime->new(
    pattern => '%m/%d/%Y' 
); 

# convert date to 
my $date = '02/01/2003'; 
my $dt = $strp->parse_datetime($date); 
printf "%s -> %s\n", $date, $dt->add(days => 30)->strftime("%d/%m/%Y"); 

OUTPUT

02/01/2003 -> 03/03/2003 
8

Sie verwenden Time::Piece + Time::Seconds (in Kern seit Perl 5.10),

use Time::Piece(); 
use Time::Seconds; 
my $date = '20030102'; 
my $numdays = 60; # 30 doesn't get us to march 

my $dt = Time::Piece->strptime($date, '%Y%m%d'); 
$dt += ONE_DAY * $numdays; 
print $dt->strftime('%Y%m%d'); 
Verwandte Themen