in reply to date span in YYYYMMDD

This appears to do what you want.

#!/usr/bin/perl -w use strict; # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec my @days = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); my ($d1,$m,$y) = (localtime)[3..5]; $y += 1900; my $d2; if ($d1 > 15) { $d1 = 1; $d2 = 15; } else { if (--$m < 0) { $m = 11; $y--; } $d1 = 16; $d2 = $days[$m]; } $m++; printf "%04d%02d%02d-%04d%02d%02d\n",$y,$m,$d1,$y,$m,$d2;
--- print map { my ($m)=1<<hex($_)&11?' ':''; $m.=substr('AHJPacehklnorstu',hex($_),1) } split //,'2fde0abe76c36c914586c';

Replies are listed 'Best First'.
Re: Re: date span in YYYYMMDD
by Aragorn (Curate) on Jan 25, 2003 at 15:55 UTC
    To deal with leap years, you could make the @days array like this:

    my @days = ( [ qw(31 28 31 30 31 30 31 31 30 31 30 31) ], # non-leap [ qw(31 29 31 30 31 30 31 31 30 31 30 31) ] # leap )

    A function to return 0 when a gives year is not a leap year, and 1 if it is:

    sub leap { my $y = shift; return ($y % 4 == 0 && $y % 100 != 0) || $y % 400 == 0; }
    and you can use it like
    my $leap = leap($y); ... $days[$leap][$m]

    Arjen