Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    funzione strtotime() sbaglia al 31 del mese

    Ciao a tutti oggi mi sono accorto che la funzione strtotime() sbaglia ad aggiungere i mesi quando siamo al 31 del mese.

    ecco il codice

    Codice PHP:

    $mese7    
    =date("m");                             
    $anno7    =date("Y");

    $mese8    =date("m"strtotime("+1 Month")); 
    $anno8    =date("Y"strtotime("+1 Month"));

    $mese9    =date("m"strtotime("+2 Month")); 
    $anno9    =date("Y"strtotime("+2 Month"));

    $mese10    =date("m"strtotime("+3 Month")); 
    $anno10    =date("Y"strtotime("+3 Month"));

    $mese11    =date("m"strtotime("+4 Month"));     
    $anno11    =date("Y"strtotime("+4 Month"));

    $mese12    =date("m"strtotime("+5 Month"));     
    $anno12    =date("Y"strtotime("+5 Month")); 
    e quello che compare è

    Anno Mese
    2008 Agosto
    2008 Ottobre
    2008 Ottobre
    2008 Dicembre
    2008 Dicembre
    2009 Gennaio

    Invece tutti i giorni del mese che non sia il 31 appare così

    Anno Mese
    2008 Agosto
    2008 Settembre
    2008 Ottobre
    2008 Novembre
    2008 Dicembre
    2009 Gennaio


    Come notate sbaglia il numero del mese

    il nome del mese lo ho ottenuto così:

    Codice PHP:
    function MeseIta($mese)
            {
                switch (
    $mese) {
                          case 
    1:
                            
    $mese="Gennaio";
                            break;
                          case 
    2:
                            
    $mese="Febbraio";
                            break;
                          case 
    3:
                            
    $mese="Marzo";
                            break;
                        case 
    4:
                            
    $mese="Aprile";
                            break;
                        case 
    5:
                            
    $mese="Maggio";
                            break;
                        case 
    6:
                            
    $mese="Giugno";
                            break;
                        case 
    7:
                            
    $mese="Luglio";
                            break;
                        case 
    8:
                            
    $mese="Agosto";
                            break;
                        case 
    9:
                            
    $mese="Settembre";
                            break;
                        case 
    10:
                            
    $mese="Ottobre";
                            break;
                        case 
    11:
                            
    $mese="Novembre";
                            break;
                        case 
    12:
                            
    $mese="Dicembre";
                            break;
                        } 
                    return 
    $mese;
            } 


    Secondo voi qual'è l'errore ???
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  2. #2
    perche' il 31 agosto + 1 mese e' uguale al 31 settembre che non esiste e quindi succede che ti calcola 30 settembre + 1 giorno cioe' 1° ottobre.

    Logica errata. Devi fissare il giorno di riferimento su cui sommare il mese e non usare la data corrente. Pensa anche al 29-30-31 gennaio..... Usa mktime()


    $mese9 =date("m", mktime(0,0,0, date('m') + 2, 01, date('Y')) )

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

  3. #3
    Grazie funziona benissimo ...

    Mi puoi spiegare in dettaglio cosa fa la funzione mktime()

    Ho provato a leggere sul manuale ma non ho capito molto applicata al caso specifico.

    Grazie
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  4. #4
    Originariamente inviato da Barman@83
    Mi puoi spiegare in dettaglio cosa fa la funzione mktime()

    Ho provato a leggere sul manuale ma non ho capito molto applicata al caso specifico.

    Grazie
    mktime rende un unix timestamp in accordo ai valori passati come data ora. L'ordine e':

    mktime( ora, min, sec, mese, giorno, anno).

    quindi

    data('m', mktime( ora, min, sec, mese, giorno, anno))

    rende il mese numerico relativo al UNIX timestamp passato a DATE() da mktime().

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

  5. #5
    [OT] Dovuto [/OT]
    Sei sempre il migliore Piero.mac !!!!

    Ho aggiunto la tua spiegazione ai commenti ed è stata chiarissima.

    Non finirò mai di ringraziarti per tutte le volte che mi aiuti.
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  6. #6
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    paypal donate?? lol
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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 © 2025 vBulletin Solutions, Inc. All rights reserved.