Ciao ..
c'è una funzione che mi permetta di fare la sottrazione fra 2 date ?
(chiaramente devo ottenere il numero di gg)
Grazie
Ciao ..
c'è una funzione che mi permetta di fare la sottrazione fra 2 date ?
(chiaramente devo ottenere il numero di gg)
Grazie
Ciao JANUS70,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
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
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:
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()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);
![]()
![]()
![]()
V.I.S.T.A. --> Virus Inside, Switch To Apple
grazie mille ..
mi metto all'opera!![]()
Perchè devi scrivere codice che è già stato pubblicato? inoltre già commentato.. oddio non capisco.. :SOriginariamente 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:
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()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);
![]()
![]()
![]()
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
Codice PHP:
$data_today = @date('Y-m-d');
$list($giorno,$mese,$anno) = explode('-', $data_today);
$ts_data_today = @mktime(0, 0, 0, $mese, $giorno, $anno);
$list($giorno,$mese,$anno) = explode('-', $data_scadenza);
$ts_data_scadenza = @mktime(0, 0, 0, $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
Ok .. sono stati saltiti dei passi ..Originariamente inviato da mr.click
Codice PHP:
$data_today = @date('Y-m-d');
$list($giorno,$mese,$anno) = explode('-', $data_today);
$ts_data_today = @mktime(0, 0, 0, $mese, $giorno, $anno);
$list($giorno,$mese,$anno) = explode('-', $data_scadenza);
$ts_data_scadenza = @mktime(0, 0, 0, $mese, $giorno, $anno);
$diff_sec = $ts_data_scadenza - $ts_data_today;
$diff_gg = ($diff_sec/86400);
ma il risultato non cambia !
Guarda se questo può fare al caso tuo:
(ovvio che devi adattarlo!)
Io lo utilizzo integrato a mysql per gestire le scadenze... funziona a meraviglia...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>=0 && $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;
?>
![]()
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 ?