2009-07-02 15 views
5

Ho un oggetto Date (da Pera) e voglio sottrarre un altro oggetto Date per ottenere la differenza di tempo in secondi.Calcola la differenza tra data/ora in PHP

Ho provato alcune cose, ma il primo mi ha dato la differenza in pochi giorni, e il secondo mi avrebbe permesso di convertire un tempo fisso in un timestamp unix ma non l'oggetto Date.

 $now = new Date(); 
     $tzone = new Date_TimeZone($timezone); 
     $now->convertTZ($tzone); 
     $start = strtotime($now); 
     $eob = strtotime("2009/07/02 17:00"); // Always today at 17:00 

     $timediff = $eob - $start; 

** Nota ** Sarà sempre inferiore a 24 ore di differenza.

+0

è il formato di output di $ ora lo stesso come la stringa si alimentano in strtotime()? cioè "aaaa/mm/gg H: i" – Mathew

+1

Probabilmente sono solo io ma non riesco a trovare la descrizione per una classe "Date" nella documentazione di PHP. Da quale libreria proviene? –

+0

Perché si converte solo uno di essi in un altro fuso orario? Non dovresti usare entrambi come ora locale o entrambi sul TZ target? –

risposta

1

dava ancora un po 'i valori sbagliati, ma considerando che ho una vecchia versione di PEAR Data in giro, forse funziona per voi o vi dà un suggerimento su come risolvere :)

<pre> 
<?php 
    require "Date.php"; 

    $now = new Date(); 
    $target = new Date("2009-07-02 15:00:00"); 

    //Bring target to current timezone to compare. (From Hawaii to GMT) 
    $target->setTZByID("US/Hawaii"); 
    $target->convertTZByID("America/Sao_Paulo"); 

    $diff = new Date_Span($target,$now); 

    echo "Now (localtime): {$now->format("%Y-%m-%d %H:%M:%S")} \n\n"; 
    echo "Target (localtime): {$target->format("%Y-%m-%d %H:%M:%S")} \n\n"; 
    echo $diff->format("Diff: %g seconds => %C"); 
?> 
</pre> 
0

Sei sicuro che la conversione di Pear Date object -> string -> timestamp funzionerà in modo affidabile? Questo è ciò che viene fatto qui:

$start = strtotime($now); 

In alternativa si potrebbe ottenere il timestamp come questo secondo il documentation

$start = $now->getTime(); 
0

farlo senza pero, per trovare i secondi 'fino a 17: 00 puoi fare:

$current_time = mktime(); 
$target_time = strtotime (date ('Y-m-d'. ' 17:00:00')); 
$timediff = $target_time - $current_time; 

Non testato, ma dovrebbe fare quello che ti serve.

0

Non penso che dovresti passare l'intero oggetto Date a strtotime. Usa uno di questi invece;

$start = strtotime($now->getDate()); 

o

$start = $now->getTime(); 
0

Forse alcune persone vogliono avere la differenza di fuso orario su Facebook. Vi dice "one minuto fa", o "2 giorni fa", ecc ... Ecco il mio codice:

function getTimeDifferenceToNowString($timeToCompare) { 

     // get current time 
     $currentTime = new Date(); 
     $currentTimeInSeconds = strtotime($currentTime); 
     $timeToCompareInSeconds = strtotime($timeToCompare); 

     // get delta between $time and $currentTime 
     $delta = $currentTimeInSeconds - $timeToCompareInSeconds; 

     // if delta is more than 7 days print the date 
     if ($delta > 60 * 60 * 24 *7) { 
      return $timeToCompare; 
     } 

     // if delta is more than 24 hours print in days 
     else if ($delta > 60 * 60 *24) { 
      $days = $delta/(60*60 *24); 
      return $days . " days ago"; 
     } 

     // if delta is more than 60 minutes, print in hours 
     else if ($delta > 60 * 60){ 
      $hours = $delta/(60*60); 
      return $hours . " hours ago"; 
     } 

     // if delta is more than 60 seconds print in minutes 
     else if ($delta > 60) { 
      $minutes = $delta/60; 
      return $minutes . " minutes ago"; 
     } 

     // actually for now: if it is less or equal to 60 seconds, just say it is a minute 
     return "one minute ago"; 

    } 
Problemi correlati