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

    Funzione giorni trascorsi

    Salve,
    ho creato questa funzione
    codice:
    <?php 
    $date = osc_item_field("dt_pub_date"); 
    $monthago = 2592000; 
    $twoweekago = 1209600; 
    $weekago = 604800; 
    $yesterday = 172800; 
    $today = 86400; 
    $time = strtotime($date); 
    $time = time()-$time; 
    if ($today > $time) { 
    $time_temp = explode (',', osc_format_date(osc_item_pub_date()));
    echo "Oggi alle" .$time_temp[1]; } 
    else if ($yesterday > $time) {
    $time_temp = explode (',', osc_format_date(osc_item_pub_date())); 
    echo "Ieri alle".$time_temp[1];} 
    else if ($weekago > $time) {echo 'Questa settimana';} 
    else if($time > $weekago && $twoweekago>$time) {echo 'Una settimana fa';} 
    else if($time > $twoweekago && $monthago>$time) {echo 'Due settimane fa';} 
    else if($monthago > $time && $monthago > $twoweekago) {echo 'Un mese fa'.$time;}
    else if($time > $monthago) {echo 'Oltre un mese';} 
    else {echo osc_format_date(osc_item_pub_date());} 
    ?>
    Che molto intuitivamente prendo la data di pubblicazione di un annuncio, sottrae al tempo corrente(funzione time()) la data dell'annuncio e in base al risultato stampa la stringa voluta..
    Il problema è che sbaglia clamorosamente, come se fosse impostato un fuso orario sbagliato.
    Per esempio un annuncio pubblicato ieri mi segna come se fosse di oggi, facendogli stampare il valore di $time effettivamente è minore di 86400 e quindi non viene attivato l'else if di "yesterday"... idee consigli?

    Mi va bene anche una versione alternativa per ottenere ciò

    Grazie in anticipo^^

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Se la data ha il formato ssaa-mm-gg e hai minimo php 5.30.

    Codice PHP:
    <?php
    $datetime1 
    date_create('2009-10-11');
    $datetime2 date_create('2009-10-13');
    $interval date_diff($datetime1$datetime2);
    echo 
    $interval->format('%R%a days');
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Alla fine ho risolto con questa:

    Codice PHP:
    function humanTiming ($time)
    {    
        
    $time time() - $time// to get the time since that moment
        
    $tokens = array (
        
    31536000 => 'anno',
        
    2592000 => 'mese',
        
    604800 => 'settimana',
        
    86400 => 'giorno',
        
    3600 => 'ora',
        
    60 => 'minuto',
        
    => 'secondo'
        
    );

        foreach (
    $tokens as $unit => $text) {
            if (
    $time $unit) continue;
            
    $numberOfUnits floor($time $unit);
                if(
    $numberOfUnits>1){
                    if (
    strcasecmp($text"settimana")==0){$text substr_replace($text ,"e",-1);}
                    else if (
    strcasecmp($text"ora")==0){$text substr_replace($text ,"e",-1);}
                    else{
    $text substr_replace($text ,"i",-1);}
                    }
                return 
    $numberOfUnits.' '.$text;
                }

    Funziona benone per le mie esigenze

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.