Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    differenza gg fra 2 date

    Ciao ..
    c'è una funzione che mi permetta di fare la sottrazione fra 2 date ?
    (chiaramente devo ottenere il numero di gg)
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alpha!
    Registrato dal
    May 2005
    Messaggi
    68

    Re: differenza gg fra 2 date

    Originariamente inviato da JANUS70
    Ciao ..
    c'è una funzione che mi permetta di fare la sottrazione fra 2 date ?
    (chiaramente devo ottenere il numero di gg)
    Grazie
    Ciao JANUS70,

    che io ricordi no non c'è nessuna funziona già implementata in PHP.
    Su google ci sono molti esempi:
    http://www.the-art-of-web.com/php/strtotime/
    http://stackoverflow.com/questions/6...ates-using-php

  3. #3
    converti le date in timestamp con mktime, fai la sottrazione dei timestamp e ottieni il numero i secondi che intercorrono. Poi dividi per 86400 e arrotondi il risultato con floor:

    Codice PHP:
    $data1 mktime($ore_1,$minuti_1,$secondi_1,$mese_1,$giorno_1,$anno_1);
    $data2 mktime($ore_2,$minuti_2,$secondi_2,$mese_2,$giorno_2,$anno_2);

    $diff abs($data_1-$data_2);  //abs restituisce il valore senza segno
    $n_giorni floor($diff/86400); 
    ovviamente se $ore,$minuti,$secondi delle rispettive chiamate a mktime sono 0, puoi evitare di utilizzare la funzione floor() per arrotondare il numero ottenuto, ma ti consiglio di lasciarla, poichè in futuro potresti avere a che fare direttamente con i timestamp, invece che con le date ottenute tramite la funzione date()

    V.I.S.T.A. --> Virus Inside, Switch To Apple

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    grazie mille ..
    mi metto all'opera!

  5. #5
    Utente di HTML.it L'avatar di Alpha!
    Registrato dal
    May 2005
    Messaggi
    68
    Originariamente inviato da mr.click
    converti le date in timestamp con mktime, fai la sottrazione dei timestamp e ottieni il numero i secondi che intercorrono. Poi dividi per 86400 e arrotondi il risultato con floor:

    Codice PHP:
    $data1 mktime($ore_1,$minuti_1,$secondi_1,$mese_1,$giorno_1,$anno_1);
    $data2 mktime($ore_2,$minuti_2,$secondi_2,$mese_2,$giorno_2,$anno_2);

    $diff abs($data_1-$data_2);  //abs restituisce il valore senza segno
    $n_giorni floor($diff/86400); 
    ovviamente se $ore,$minuti,$secondi delle rispettive chiamate a mktime sono 0, puoi evitare di utilizzare la funzione floor() per arrotondare il numero ottenuto, ma ti consiglio di lasciarla, poichè in futuro potresti avere a che fare direttamente con i timestamp, invece che con le date ottenute tramite la funzione date()

    Perchè devi scrivere codice che è già stato pubblicato? inoltre già commentato.. oddio non capisco.. :S

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    non ci siamo ..

    esempio:
    devo fare la differenze tra la data del giorno (estratta con "$ts_data_today = time();") -> 2011 02 24 - 00:33
    e la data "2011-08-02"

    dalla data del giorno mi estraggo solo anno, mese e giorno (per eliminare tutto il resto .. i "rotti") e ricreo il timestamp
    a stò punto faccio la differenza dei 2 timestamp (al netto di ore, minuti e secondi), e la divido per '86400', aspettandomi un
    numero intero .. e invece -> 158.95833333333

    il problema è che io devo avere un risultato CERTO


    codice:
    $ts_data_today = time();                                                           
    $data_today = date('Y m d - H:i', $ts_data_today);   // -> "2011 02 24 - 00:33"    
    $data_today = substr($data_today,0,10);                // -> "2011 02 24"            
    $data_today = str_replace(' ', '-', $data_today);       // -> "2011-02-24"            
    $data_arr = explode('-', $data_today);                                             
    $ts_data_today = mktime("0", "0", "0", $data_arr[1], $data_arr[2], $data_arr[0]);  
    
    ts_data_today ---> 1298502000
    
    $data_arr = explode('-', $data_scadenza);                                                
    $ts_data_scadenza = mktime("0", "0", "0", $data_arr[1], $data_arr[2], $data_arr[0]);     
    
    ts_data_scadenza ---> 1312236000
    
    $diff = ($ts_data_scadenza - $ts_data_today);         
    
    diff ---> 13734000
                                       
    $diff_gg = ($diff/86400);                                                                
    
    diff_gg ---> 158.95833333333

  7. #7
    Codice PHP:
    $data_today = @date('Y-m-d');          
    $list($giorno,$mese,$anno) = explode('-'$data_today);                                             
    $ts_data_today = @mktime(000$mese$giorno$anno);  

    $list($giorno,$mese,$anno) = explode('-'$data_scadenza);                                                
    $ts_data_scadenza = @mktime(000$mese$giorno$anno);       

    $diff_sec $ts_data_scadenza $ts_data_today;         
                                       
    $diff_gg = ($diff_sec/86400); 
    V.I.S.T.A. --> Virus Inside, Switch To Apple

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Originariamente inviato da mr.click
    Codice PHP:
    $data_today = @date('Y-m-d');          
    $list($giorno,$mese,$anno) = explode('-'$data_today);                                             
    $ts_data_today = @mktime(000$mese$giorno$anno);  

    $list($giorno,$mese,$anno) = explode('-'$data_scadenza);                                                
    $ts_data_scadenza = @mktime(000$mese$giorno$anno);       

    $diff_sec $ts_data_scadenza $ts_data_today;         
                                       
    $diff_gg = ($diff_sec/86400); 
    Ok .. sono stati saltiti dei passi ..
    ma il risultato non cambia !

  9. #9
    Guarda se questo può fare al caso tuo:
    (ovvio che devi adattarlo!)

    Codice PHP:
    <?php 

        
    //funzione per gestione scadenza tra due date countdown                        
                        
    function date_diff($start$end="NOW")
    {
            
    $sdate strtotime($start);
            
    $edate strtotime($end);

            
    $time $edate $sdate;
            if(
    $time>=&& $time<=59) {
                    
    // Seconds
                    
    $timeshift $time.' seconds ';

            } elseif(
    $time>=60 && $time<=3599) {
                    
    // Minutes + Seconds
                    
    $pmin = ($edate $sdate) / 60;
                    
    $premin explode('.'$pmin);
                    
                    
    $presec $pmin-$premin[0];
                    
    $sec $presec*60;
                    
                    
    $timeshift $premin[0].' min '.round($sec,0).' sec ';

            } elseif(
    $time>=3600 && $time<=86399) {
                    
    // Hours + Minutes
                    
    $phour = ($edate $sdate) / 3600;
                    
    $prehour explode('.',$phour);
                    
                    
    $premin $phour-$prehour[0];
                    
    $min explode('.',$premin*60);
                    
                    
    $presec '0.'.$min[1];
                    
    $sec $presec*60;

                    
    $timeshift $prehour[0].' hrs '.$min[0].' min '.round($sec,0).' sec ';

            } elseif(
    $time>=86400) {
                    
    // Days + Hours + Minutes
                    
    $pday = ($edate $sdate) / 86400;
                    
    $preday explode('.',$pday);

                    
    $phour $pday-$preday[0];
                    
    $prehour explode('.',$phour*24); 

                    
    $premin = ($phour*24)-$prehour[0];
                    
    $min explode('.',$premin*60);
                    
                    
    $presec '0.'.$min[1];
                    
    $sec $presec*60;
                    
                    
    $timeshift $preday[0].' giorni '.$prehour[0].' ore '.$min[0].' min '.round($sec,0).' sec ';

            }
            return 
    $timeshift;
    }

    // EXAMPLE:
    $oggi date('Y-m-d H:i:s');
    $start_date $oggi;
    $end_date $scadenza;

    ?>
    Io lo utilizzo integrato a mysql per gestire le scadenze... funziona a meraviglia...

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    grazie mille
    stasera con calma ci dò un'occhiata (non è che con PHP sia un proprio un mago .. )
    ma in soldoni .. a cos'è che ti serve per le scadenze ?

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.