Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [PHP]date

  1. #1
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247

    [PHP]date

    Ho impementato una funzione che date due date mi calcola tutte le date intermedie.
    Quindi data la prima data e la seconda estraggo i giorni me se ed anno di queste con:
    list($anno_i,$mese_i,$giorno_i) = explode('-',$data_inizio);
    list($anno_f,$mese_f,$giorno_f) = explode('-',$data_fine);
    e sulla loro base recupero di ognuna lo unix timestamp:
    $timestamp_inizio = mktime ( 0, 0, 0, $mese_i, $giorno_i, $anno_i);
    $timestamp_fine = mktime ( 0, 0, 0, $mese_f, $giorno_f, $anno_f);
    Fatto aanche questo sapendo che un gionro è pari a $day = 60*60*24;
    scrivo il seguente codice:
    $timestamp_temp = $timestamp_inizio;
    while ($timestamp_fine - $timestamp_temp >= 0){
    $nuova_data = date("Y-m-d",$timestamp_temp);
    $mese = strftime ("%B %Y", $timestamp_temp);
    $array_date[$mese][] = $nuova_data;
    $timestamp_temp += $day;
    }
    Ossia sommo alla data iniziale 1 giorno e metto il tutto in un array bidimensionale con le date dei vari mesi separate.
    La cosa anomala è quando le due date sono a cavallo dei mesi di ottobre e novembre.Il bello è che la data del 31 Ottobre mi compare due volte VVoVe:
    Sarà per caso il cambiamento di orario che altera il processo?
    E se è questo, come posso porvi rimedio?

    Grazie per la risposta.
    Andrea

  2. #2
    Non ho letto a fondo... ti posto come faccio per i fill-up delle date
    codice:
    $data_i = '2004-01-01';
    $data_f = '2004-12-31';
    
    $link = mysql_connect('host','user','pwd');
    $action = "SELECT to_days('$data_f') - TO_days('$data_i') as diff";
    $query = mysql_query($action, $link);
    $diff = mysql_result($query,0,'diff');
    
    $num= "";
    list($anno_i, $mese_i, $giorno_i) = explode('-',$data_i);
    for ($i=0; $i<=$diff; ++$i ) {
    $data = date("Y-m-d", mktime(0,0,0, $mese_i, $giorno_i + $i, $anno_i));
    echo "$data
    ";
    $num = $num + 1;
    }
    Utilizzo una funzione di mysql per calcolare in modo semplice il numero dei giorni di differenza. Non servono tabelle, solo la connessione.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Dimenticavo.... per il tuo errore.

    Certamente dipende dall'ora legale. Quel giorno le ore sono 25 e non 24. In pratica, almeno credo in base al tuo script, dovresti trovare 2 volte il 31 ottobre e mancare l'ultima data.... A meno che il range non si prolunghi oltre la fine del marzo successivo, dove con la perdita di un'ora tornerebbe normale.

    Ed era proprio per questa ragione che avevo contato i giorni con mysql.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Rivedendo il tuo script tu metti dentro ad un array un semplice calendario...

    Potresti usare gmmktime ti calcola il tempo di greenwich quindi senza l'ora legale...

    $timestamp_inizio = gmmktime ( 0, 0, 0, $mese_i, $giorno_i, $anno_i);
    $timestamp_fine = gmmktime ( 0, 0, 0, $mese_f, $giorno_f, $anno_f);



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247
    Grazie molto per le tue risposte come sempre accurate e precise.
    Comunque ho risolto facendo calcolare le date al mysql.

    Ciao
    Andrea

  6. #6
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247
    Dimenticavo:
    a chi interessa ho fatto in questo modo:
    codice:
    //array con i mesi in formato testo
    $mesi=array(1=>'Gennaio',2=>'Febbraio',3=>'Marzo',4=>'Aprile',5=>'Maggio',
    6=>'Giugno',7=>'Luglio',8=>'Agosto',9=>'Settembre',10=>'Ottobre',11=>'Novembre',12=>'Dicembre');
    
    //io ho bisogno di generare le date da oggi a 6 settimane avanti
    $num_week = 6;
    $day_number = $num_week * 7;
    for($j=1;$j<=$day_number;$j++){
    $query_date = "SELECT DATE_FORMAT(now()+interval $j day,'%Y-%m-%d'),MONTH(now()+interval $j day)";
    $ris = @mysql_query($query_date,$open_db_conn)or die (mysql_error()); 
        $pointer_date = mysql_fetch_row($ris);
        $nuova_data = $pointer_date[0];
        $mese = $mesi[$pointer_date[1]];
        //print $nuova_data.'  ' . $mese . '
    ';
        $array_date[$mese][] = $nuova_data;
    }
    Alla fine si ritrova un array bidimensionale dove si ha come primo indice il nome del mese e come secondo indice una array con tutte le date che gli appartengono.

    Ciao e grazie ancora a Piero ed alla sua pillola sulle date in MySQL
    Andrea

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.