Domanda

Sto cercando di lavorare con le date per la prima volta, l'ho fatto qualcosa a tale proposito con Flash, ma è diverso.

Ho due date diverse e mi piacerebbe vedere la differenza tra ore e giorni con loro, ho trovato troppi esempi, ma non quello che sto loking per:

<?php
    $now_date = strtotime (date ('Y-m-d H:i:s')); // the current date 
    $key_date = strtotime (date ("2009-11-21 14:08:42"));
    print date ($now_date - $key_date);
    // it returns an integer like 5813, 5814, 5815, etc... (I presume they are seconds) 
?>

Come faccio a convertirlo in ore o giorni?

È stato utile?

Soluzione

Bene, si può sempre utilizzare date_diff, ma che è solo per PHP 5.3.0 +

L'alternativa sarebbe la matematica.

  

Come faccio a convertirlo [secondi] per ore o per giorni?

Ci sono 60 secondi al minuto, che significa che ci sono 3600 secondi all'ora.

$hours = $seconds/3600;

E, naturalmente, se avete bisogno di giorni ...

$days = $hours/24;

Altri suggerimenti

La funzione DateTime diff restituisce un oggetto DateInterval. Questo oggetto è costituito da variabeles relative alla differenza. È possibile interrogare i giorni, ore, minuti, secondi, proprio come nell'esempio di cui sopra.

Esempio:

<?php 
 $dateObject = new DateTime(); // No arguments means 'now'
 $otherDateObject = new DateTime('2008-08-14 03:14:15');
 $diffObject = $dateObject->diff($otherDateObject)); 
 echo "Days of difference: ". $diffObject->days; 
?>

Vedere il manuale sulla DateTime .

Purtroppo, è un PHP 5.3> unica caratteristica.

Se non avete PHP5.3 è possibile utilizzare questo metodo da userland ( tratto da WebDeveloper.com )

function date_time_diff($start, $end, $date_only = true)  // $start and $end as timestamps
{
    if ($start < $end) {
        list($end, $start) = array($start, $end);
    }
    $result = array('years' => 0, 'months' => 0, 'days' => 0);
    if (!$date_only) {
        $result = array_merge($result, array('hours' => 0, 'minutes' => 0, 'seconds' => 0));
    }
    foreach ($result as $period => $value) {
        while (($start = strtotime('-1 ' . $period, $start)) >= $end) {
            $result[$period]++;
        }
        $start = strtotime('+1 ' . $period, $start);
    }
    return $result;
}

$date_1 = strtotime('2005-07-31');
$date_2 = time();
$diff = date_time_diff($date_1, $date_2);
foreach ($diff as $key => $val) {
    echo $val . ' ' . $key . ' ';
}

// Displays:
// 3 years 4 months 11 days 

TheGrandWazoo menzionato un metodo per PHP 5.3>. Per le versioni più bassi è possibile dividere il numero di secondi tra le due date con il numero di secondi in un giorno per trovare il numero di giorni.

Per giorni, si fa:

$days = floor(($now_date - $key_date) / (60 * 60 * 24))

Se volete sapere quante ore sono ancora a sinistra, è possibile utilizzare l'operatore modulo (%)

$hours = floor((($now_date - $key_date) % * (60 * 60 * 24)) / 60 * 60)
<?php
    $now_date = strtotime (date ('Y-m-d H:i:s')); // the current date 
    $key_date = strtotime (date ("2009-11-21 14:08:42"));
    $diff = $now_date - $key_date;
    $days    = floor($diff/(60*60*24));
    $hours   = floor(($diff-($days*60*60*24))/(60*60));
    print $days." ".$hours." difference";
?>

Io preferisco usare epoca / unix delta di tempo. Tempo rappresentato in pochi secondi e in quanto tale, si può dividere molto rapidamente dal 3600 per ore e dividere per 24 * 3600 = 86400 per giorni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top