Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    139

    Giorni mancanti al prossimo compleanno

    Salve praticamente devo calcolare quanti giorni mancano al prossimo compleanno, ho fatto in questo modo:

    codice:
    $gior = date("d"); //giornata odierna
    $mes = date("m"); //mese odierno
    
    if($giorno <= $gior && $mese <= $mes){ //controllo se ha già compiuto gli anni quest'anno se si sposto anno attuale avanti di 1, $giorno e $mese sono il giornoe  il mese del compleanno
    $annoavanti = date("Y") + 1;
    }else{
    $annoavanti = date("Y");} 
    
    $compleavanti = strtotime($annoavanti.'-'.$mese.'-'.$giorno); //data prossimo compleanno
    
    $datediffcomple = $compleavanti - $now; //now é la data di oggi in secondi
    
    $giorniprox = floor($datediffcomple/(60*60*24)); // calcolo i giorni

    mi da risultati errati ad esempio se metto la data odierna mi restituisce compio gli anni tra 364 giorni dovrebbe essere 365 giorni

  2. #2
    L'inghippo, secondo me è l'istruzione:

    $compleavanti = strtotime($annoavanti.'-'.$mese.'-'.$giorno)
    che da il tempo in secondi all'ora 0

    mentre now() da il tempo del giorno attuale in secondi ora compresa (che non è l'ora 0).

    Facendo la differenza

    $datediffcomple = $compleavanti - $now

    ottieni certamente un giorno in meno, dovuti ai secondi 0 ($compleavanti) meno quelli di now() che sono sicuramente diversi da 0.

    sostituisci floor con ceil che arrotonda all'unità superiore.



    Altra cosa, non sono sicuro che il test

    if($giorno <= $gior && $mese <= $mes)

    ti dia il risultato che ti aspetti, in non uso && ma and (uso diversi linguaggi e per abitudine forse unifico i comandi) ma credo che la data 10 agosto ti venga scartata perchè il mese è minore ma il giorno no (con test in data 6 ottobre 2012).

  3. #3
    Peraltro...... $now da dove esce fuori?
    E la data del compleanno da controllare se passata o futura????
    Io riscriverei il codice così!

    Codice PHP:
    $today time(); //giornata odierna - in formato timestamp
    $compleanno xxx
    /* 
    qui non so come fai a recuperare la data
    se da DB o meno ed in quale formato
    Eventualmente la porti in formato Timestamp con strtotime()
    */

    // controlli se il compleanno è già passato
    if ($today $compleanno) {
    // il compleanno è già passato per cui aggiungi 
    // un anno alla data odierna poi fai la differenza

    } else {
    // il compleanno deve ancora arrivare
    // fai direttamente la differenza

    Spero di essere stato chiaro.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.