differenza tra 2 date

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Buonasera a tutti,
so che l'argomento è già stato trattato più volte, ma non sono riuscito lo stesso a comprendere.

In pratica estrapolo una data dal DB, gli aggiungo 1 giorno e poi devo stampare quante ore e minuti rimangono da adesso a quella data.
Esempio:
estraggo dal db '2013/11/16 18:10:00', la formatto in '16/11/2013 18:10:00', la stampo con 1 giorno in più '17/11/2013 18:10:00' e sotto dovrei stampare quante ore e minuti rimangono da 'adesso' al '17/11/2013 18:10:00'.

Questo è quello che ho fatto io fino ad ora, ed il risultato è sempre 0.
PHP:
$dt_occ		= mysql_result($info,0,"occ_data"); // estraggo data da DB
$dt_occ		= strtotime($dt_occ); // la converto
$dt_occ		= strtotime('+1 day' , $dt_occ); // aggiungo 24 ore (1 giorno)
$dt_unico		= date('d/m/Y H:i:s',$dt_occ); // la formatto in italiano
$dt_il			= date('d/m/Y',$dt_occ); // data
$dt_alle		= date('H:i',$dt_occ); // orario
echo "Scade il ".$dt_il." alle ".$dt_alle; // stampo la data di scadenza
$adesso = strtotime("now"); // data di adesso
$adesso = date('d/m/Y H:i:s',$adesso); // formatto in italiano
$diff = $dt_unico - $adesso; // differenza tra le date
$hours = $diff / ( 60 * 60 ); // dovrebbe restituirmi le ore
$mins = $diff / 60; // dovrebbe restituire i minuti
echo "<br>Scadenza tra ".$hours.":".$mins."."; // mi stampa sempre 0:0
 
Risolto, grazie lo stesso.

PHP:
// estraggo data da DB
$dt_occ        = mysql_result($info,0,"occ_data");

// la converto in timestamp
$dt_occ        = strtotime($dt_occ);

// data +1 giorno in formato timestamp
$dt_occ_ts    = strtotime('+1 day' , $dt_occ);

// la formatto in italiano
$dt_unico    = date('d/m/Y H:i:s',$dt_occ_ts);

// data
$dt_il        = date('d/m/Y',$dt_occ_ts);

// orario
$dt_alle    = date('H:i',$dt_occ_ts);

// stampo la data di scadenza
echo "Scade il ".$dt_il." alle ".$dt_alle."<br />";

// data di adesso in formato timestamp
$adesso_ts    = time();

// differenza tra le date
$diff = $dt_occ_ts - $adesso_ts;

// restituisce le ore
$hours = floor($diff / (60 * 60));

//secondi rimanenti su cui calcolare i minuti
$diff = $diff - ($hours * 60 * 60);

// dovrebbe restituire i minuti
$mins = floor($diff / 60);

echo "<br>Scadenza tra ".$hours.":".$mins.".";
 
Ciao, ti ringrazio intanto per aver postato la soluzione,
volevo poi proporti una versione alternativa stile OOP che fa uso della classe DateTime() ( disponibile dalla versione 5.2.0 di php) e la classe mysqli() per la connessione al database che dovresti studiare per sostituire la vecchia estensione mysql
PHP:
<?php

$sql = new mysqli("localhost", "root", "", "database");

$query = "SELECT (data + INTERVAL 1 DAY) as data FROM tabella LIMIT 1";

$row = $sql->query($query)->fetch_array(MYSQLI_ASSOC);

$data = new DateTime($row['data']);
$adesso = new DateTime(date("Y-m-d h:i:s"));
$diff = $adesso->diff($data);

echo "Scade il " . $data->format("d/m/Y") . " alle " . $data->format("H:i");
echo "<br>tra " . $diff->h . " ore e " . $diff->i . " minuti";
?>
 
Ciao, è già da tempo che sento parlare di questa classe mysqli ma sinceramente non ho capito a che serve. Ho letto che la mysql è ormai deprecata, quindi cosa comporta questo? Quali sono i benefici di mysqli? Perché conviene cambiarla?
 
ciao
mysqli sono le istruzioni che andranno a sostituire le mysql, possono essere utilizzate con stile a oggetti o stile procedurale (quasi simile alle vecchie mysql).
bisogna cambiarle perche se il tuo host aggiorna php alla versione 5.5, dal manuale php
Warning
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_query()
PDO::query()
per i vantaggi non ti so dire esattamente, ma il "vantaggio" più immediato è che chi ha fatto qualcosa con le mysql deve rompersi i co...ni a correggere il tutto (questo perche qualche guru ha mangiato troppo e di notte ha avuto gli incubi)
 

Discussioni simili