Ciclo for su date

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve a tutti,
ho un problema per cui sto sbattendo la testa su monitor e tastiera seguendo proprio l'iter del ciclo for. :hammer:

devo semplciemnte inserire in un menù a tendina le date a partire da oggi epr 10 giorni

- 25/02/2013
- 26/02/2013
- 27/02/2013
- 28/02/2013
- 01/03/2013
- 02/03/2013
etc.

Ho adattato uno scriptino trovato in rete che non faceva proprioq uelloc he volevo e ci sono quasi arrivato

PHP:
<?php
$data=date("d/m/Y");

list($giorno, $month, $anno)=explode("/", $data);

$month = date("m");
$count = 10;

if($month==2){ $day=28; } elseif($month==11 || $month=4 || $month=6 || $month=9) { $day=30; } else { $day=31; }


$giorno = array_merge(range($giorno, $day), range(1, $giorno));

for($i = 0; $i < $count; $i++) {
$array = array($giorno[$i],$month,$anno);
$xx= implode("/", $array);
echo "<option value=\"$xx\">$xx</option>";
} 
?>

cosi mi lista le date però usa sempre los tesso mese. io ora vorrei fargli capire che quando arriva a $day massimo deve aggiungere un mese.

ho provatoa ggiungendo questa consdizione nel ciclo
PHP:
if($i==1){ $month=$month+1}else{$month=$month;}
ma ovviamente quando trova 1 mi mettte il mese a 3 ma poi ritorna con il mese a 2

in pratica mi fa
28/02/2013
01/03/2013
02/02/2013

ci sto provando di tutte le amniere ma non reisco a farglie capire e non so come dare due condizioni al for

help to me please
 
Ciao,
puoi provare cosi
PHP:
<select name="data">
    <?php
    $oggi = date("d/m/Y");
    $oggi_array = explode("/", $oggi);
    for ($i = 0; $i < 10; $i++) {
        $incremento = date("d/m/Y", mktime(0, 0, 0, $oggi_array[1], ($oggi_array[0] + $i), $oggi_array[2]));
        echo "<option value='$incremento'>$incremento</option>";
    }
    ?>
</select>
non ho testato, se hai bisogno te lo commento

EDIT
o piu elegante
PHP:
<select name="data">
    <?php
    for ($i = 0; $i < 10; $i++) {
        $giorno = date("d/m/Y", mktime(0, 0, 0, date('m'), (date('d') + $i), date('Y')));
        echo "<option value='$giorno'>$giorno</option>";
    }
    ?>
</select>
 
Ultima modifica:
ciao
e visto che a me piace il timestamp, anche così

PHP:
<select name="data">
<?php
$oggi=time();
$conta=10;
for ($i = 0; $i < 10; $i++) {
	$giorno=$oggi+24*60*60*$i;
	echo "<option value='".date("d/m/Y",$giorno)."'>".date("d/m/Y",$giorno)."</option>";
}
?>
</select>
 
Perfetto criric sei un grande,

oggi l'ho inserito e staser l'ho testato, sonos tatos tupido se ci ragionavo un pò di più potevo arrivarci era anche semplice come soluzione, a volte ci si perde in cose complicate quando el soluzioni sono più facili.

Borgo grazie anche a te ma se non ricordo male,so leggermente sbaglio quindi potrei sbagliare, ma il timestamp mei restituisce la data in formato numerico e datoc he quella selezione devo inserirla neld atabase con campo date, e la faccio visualizzare in un modo e la registro in un altro preferisco evitar eun ulteriore conversione.

Grndissimi come sempre . :fonzie:
 
Ultima modifica:
ne approfitto per postare una versione modificata
- visualizza il mese corrente intero
- imposta la data nel value formattata per un eventuale ricerca in un database
- seleziona il giorno corrente
PHP:
<select name="data">
    <?php
    // primo giorno del mese corrente
    $primo = "01/" . date("m/Y");
    $primo_array = explode("/", $primo);
    // ciclo fino all'ultimo giorno del mese corrente
    for ($i = 0; $i < date('t'); $i++) {
        // timestamp
        $giorno_time = mktime(0, 0, 0, $primo_array[1], ($primo_array[0] + $i), $primo_array[2]);
        // preparo la data in formato umano
        $giorno = date("d/m/Y", $giorno_time);
        // preparo la data per ysql
        $giorno_mysql = date("Y-m-d", $giorno_time);
        // stampo la option
        echo "<option value='$giorno_mysql'";
        // se la data corrente è uguale al value
        if ($giorno_mysql == date("Y-m-d")) {
            // la seleziono
            echo " selected='selected'";
        }
        echo ">$giorno</option>\n";
    }
    ?>
</select>
 
ciao
a strenua difesa del timestamp :)
secondo me il problema non è tanto nell'inserimeto, ma poi nell'estrazione
PHP:
<?php
$data=$row['data'];
// se in formato date
$e=explode("/",$data);
echo "oggi è il ".$e[2]."/".$e[1]."/".$e[0];
//se in timestamp
echo "oggi è il ".date("d/m/Y",$data);
?>
 
a favore del tipo DATE di mysql :tifoso:
guarda quante funzioni ti perderesti
e si puo anche convertire in una sola riga di codice
PHP:
<?php
$data = "2013-02-25";
echo "oggi è il " . implode("/", array_reverse(explode("-", $data)));
?>

edit
riguardando le funzioni linkate sopra ....
PHP:
<?php

$query = "SELECT DATE_FORMAT(campodata,'%m/%d/%Y') as data FROM tabella";

$data = $row['data'];
echo "oggi è il " . $data;
?>
 
Ultima modifica:
ciao
posso sbagliarmi ma nche col campo tipo date devi fare delle conversioni per far risultare la data in italiano
http://dev.mysql.com/doc/refman/5.0/en/datetime.html

Onestamente da quando sto suando il campo DATE o DATE TIME nel database son risucito agevolmente a fare i vari controlli sulle date.

ho creato uno script dove trasformo in variabili i valori di un campo in una tabella contenente tutte le date e poi le confornto con la data attuale, molto molto sbirgativo.

cmq sto topic me los alvo in tutte le salse perchè ci sono informazioni molto ghiiotte, mi avete quasi risolto una ltro cruccio.

:quote:
 

Discussioni simili