Date :: Calc - форматировать день и месяц - PullRequest
5 голосов
/ 12 августа 2011

Все, что я пытаюсь сделать здесь, это если день или месяц представляют собой одну цифру, чтобы добавить ноль в начале.Прямо сейчас она печатает дату как 201188, а я ищу 20110808.

#!/usr/bin/perl
use Date::Calc qw(Add_Delta_Days); 
my (undef, undef, undef, $day, $month, $year) = localtime(); 
$year +=1900; 
$month +=1; 
($year, $month, $day ) = Add_Delta_Days($year, $month, $day, -3)
if ($month =~ /\d{1}/){
    s/$month/0$month/
}  
if ($day =~/\d{1}/){ 
    s/$day/0$day/
}
print $year,$month,$day; 

Ответы [ 3 ]

5 голосов
/ 12 августа 2011

Если вы счастливы использовать Date::Calc, почему бы не использовать DateTime?

use DateTime;
my $date = DateTime->now;
$date->subtract(days => 3);
print $date->ymd;

Фактически вы можете уменьшить это значение до:

print DateTime->now->subtract(days => 3)->ymd
4 голосов
/ 12 августа 2011

Используйте printf вместо:

printf "%d-%02d-%02d", $year, $month, $day;

Дает вывод, такой как:

C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,5,4"
2011-05-04
C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,5,12"
2011-05-12
C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,22,12"
2011-22-12
2 голосов
/ 12 августа 2011

if ($ month <10) <br>{
$ month = "0 $ month";
}

if ($ day <10) <br>{
$ day = "0 $ day";
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...