2013-01-23 4 views
0

Je suis en train de déterminer la différence entre la date d'un fichier dans un répertoire et la date actuelle, j'ai essayé calculer deux façons:Comment puis-je convertir la différence entre deux dates unixtime en plusieurs jours?

$fileUnixTimeDate = filemtime($file); 
$fileFormattedDate = date('m/d/y',filemtime($file)); 

$todayUnixTimeDate = time(); 
$todayFormattedDate = date('m/d/y',time()); 

$unixDifference = $todayUnixTimeDate - $fileUnixTimeDate; 
$formattedDifference = $todayFormattedDate - $fileFormattedDate; 

Ceci est le résultat de deux fichiers dans le répertoire:

enter image description here

+0

Alors, quel est le problème réel? –

+1

Peut-être intéressant de regarder dans la classe PHP DateTime. –

+2

Considérons que votre version formatée est en train de soustraire ** STRINGS **. «12/01/12 moins 01/23/13» -> «12 moins 01» -> «12-1» = «11». La version unix est correcte - ce sont simplement des entiers. vous obtenez une différence en quelques secondes, que vous pouvez convertir en minutes/heures/jours avec quelques calculs simples. –

Répondre

2

Je ne peux que supposer que vous essayez d'obtenir le nombre de jours de différence:

$fileUnixTimeDate = filemtime($file); 
$todayUnixTimeDate = time(); 

$unixDifference = $todayUnixTimeDate - $fileUnixTimeDate; 
$daysDifference = $unixDifference/86400; 

Remarque: 86400 car il y a 86400 secondes en 1 jour.

$daysDifference contient le nombre de jours.

0

Le calcul du temps unix font déjà est un bon début:

$fileUnixTimeDate = filemtime($file); 
$todayUnixTimeDate = time(); 
$unixDifference = $todayUnixTimeDate - $fileUnixTimeDate; 

maintenant avec les résultats donnés (7389045 7216242) & dont vous avez besoin de les convertir en un format lisible. Par exemple, 7389045 ~ = 85,5 jours. 7216242 ~ = 83,5 jours

echo "Hours difference = ".floor((unixDifference)/3600) . "<br>"; 
echo "Minutes difference = ".floor((unixDifference)/60) . "<br>"; 
echo "Seconds difference = " .(unixDifference). "<br>"; 
echo "Days difference = ".floor((unixDifference)/86400) . "<br>"; 

Essayez cela et voir quels sont les résultats que vous obtenez.

Voir cette question: Finding days between 2 unix timestamps in php

Et plus sur Unix Time: http://en.wikipedia.org/wiki/Unix_time

+1

Une fois que vous obtenez au-dessus des «jours» en tant qu'unités vos calculs deviennent incroyablement peu fiables si vous continuez à simplement diviser par un certain nombre de secondes. À ce stade, vous devez aller à une classe comme [DateTime] (http://ca2.php.net/manual/fr/book.datetime.php) qui prend en compte les différents jours dans le mois, les années bissextiles/secondes , etc. – Sammitch

+0

Excuses, je viens de copier collé de l'article lié sans l'examiner. Je vais l'enlever puisque vous avez 100% raison. – Grambot

3

Utilisez la classe de PHP DateTime - instancier les deux dates comme des objets de DateTime et faire un diff entre eux. Enfin, formatdiff pour afficher la valeur du jour.

Utilisez http://php.net/DateTime comme référence.

EDIT: Exemple:

$dt1 = new DateTime(date('Y-m-d H:i:s', filemtime($file))); 
$dt2 = new DateTime(); // this would be the "now" datetime 

$diff = $dt1->diff($dt2); 

echo $diff->format('%R%a days'); 
0

Utilisation de la classe DateTime rend très facile de travailler avec des dates:

// Pretend this is from "filemtime()" 
$time = strtotime('9 days ago'); 

// Create a DateTime object using the file's creation time 
// Note: Unix timestamps need to be prefixed with "@" 
$filetime = new \DateTime('@'.$time); 

// The datetime right now, for comparison 
$now = new \DateTime('now'); 

// Get the difference between the two times 
$diff = $filetime->diff($now); 

// And echo out the day difference 
echo "The file was created {$diff->days} days ago."; 

La variable $diff contient beaucoup de bonnes choses:

object(DateInterval)[3] 
    public 'y' => int 0 
    public 'm' => int 0 
    public 'd' => int 9 
    public 'h' => int 0 
    public 'i' => int 0 
    public 's' => int 0 
    public 'invert' => int 0 
    public 'days' => int 9