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 iniziofor($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