[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [bash] Visualizzare intervallo di date



Andrea Ganduglia wrote:
L'ho scritto in PHP alla fine.

Forse nel caso specifico sarebbe stato piu' adatto
il perl (lo dico a "naso", visto che non so ne' questo ne' il php),
ma alla fine e' ovviamente opportuno scegliere il linguaggio che meglio
si conosce.

Il problema con date e' che devo fare
troppi passaggi per ottenere lo stesso risultato, infatti l'opzione -f
che consente di indicare di quanti giorni andare avantii (o indietro)
e' incompatibile con l'opzione -d che in questo caso indicherebbe la
data di partenza.

Ribadisco, tutto dipende da come usi il comando date...
Se ho capito che cosa deve fare lo script e a meno di sviste di
programmazione, questa e' una soluzione piu' concisa in bash
che sfrutta quel comportamento strano del comando date
(senza una serie molto lunga di controlli sull'input, ma credo
di aver riprodotto quelli che hai specificato tu)

-----------------------------------------------------------------
#!/bin/sh
[ -z "$*" ] && echo "`basename $0` data_inizio data_fine" && exit 0
IFS="/ " && { read g1 m1 a1 <<< $1; read g2 m2 a2 <<< $2; }
[ -z "$a1" ] && a1=`date -d now +%Y`
[ -z "$a2" ] && a2=`date -d now +%Y`
[ "$a1" == "$a2" ] || { echo "Anni differenti"; exit 0; }
while : ; do
    stringa=`date -d $m1/$g1/$a1 "+%d/%m/%Y"` && echo $stringa
    [ "$stringa" == "`date -d $m2/$g2/$a2 '+%d/%m/%Y'`" ] && exit 0
    (( g1++ ))
done
------------------------------------------------------------------

<?php
# data di inizio e file
# parsate e inserite come mm/dd/yyyy
# l'intervallo di date puo' essere solo # all'interno dello stesso anno
$dateone = trim($argv[1]);
$datetwo = trim($argv[2]);
#$dateone = "01/12/2005";
#$datetwo = "15/12/2005";

$dateone = explode("/",$dateone);
$one_d = $dateone[0];
$one_m = $dateone[1];
$one_y = $dateone[2];

if(!$one_y){
        $one_y = date("Y");
        }

$datetwo = explode("/",$datetwo);
$two_d = $datetwo[0];
$two_m = $datetwo[1];
$two_y = $datetwo[2];

if(!$two_y){
        $two_y = date("Y");
        }

# controllo che l'annata sia quella buona!
if($one_y != $two_y){

        echo "\nErrore! Le date devono essere dello stesso anno\n\n";
        exit(0);

}

# ricavo il giorno dell'anno
$start  = date('z', mktime(0,0,0,$one_m,$one_d,$one_y));
$end    = date('z', mktime(0,0,0,$two_m,$two_d,$two_y));

# differenza in giorni
$diff = $end-$start;


# stampo le date nell'intervallo specificato a partire dalla date # di inizio
for($i=0;$i<=$diff;$i++){

        echo date("Y-m-d", strtotime("+".$i."
day",mktime(0,0,0,$one_m,$one_d,$one_y))),"\n";

}
?>


Saluti

Cristian



Reply to: