2010-11-14 6 views
0

Je l'ai fait et il besoin d'aide peaufinage pour qu'il donne le résultat correcttrouver la différence entre 2 dates

function daysDifference($end){ 
    //$start = "2007-03-24"; 
    //$end = "2009-06-26"; 
    $now = date("Y-m-d"); 
    $e = (is_string($end) ? strtotime($end) : $end); 

    $diff = abs($e - strtotime($now)); 

    $years = floor($diff/(365 * 60 * 60 * 24)); 
    $months = floor(($diff - $years * 365 * 60 * 60 * 24)/(30 * 60 * 60 * 24)); 
    $days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 * 24)/ (60 * 60 *24)); 

    return ($years == 0 ? '' : ($years == 1 ? $years . ' year ' : $years . ' years ')) . ($months == 0 ? '' : ($months == 1 ? $months . ' month ' : $months . ' months ')) . ($days == 0 ? '' : ($days == 1 ? $days . ' day ' : $days . ' days ')); 
} 

$end est tiré de ma base de données donc il y a des contrôles pour voir si sa chaîne ou une date déjà.

$e peut maintenant être utilisé, mais quand j'ai essayé de soustraire $now de $e I obtenir des résultats drôles

par exemple:

$now étant aujourd'hui le 13th et $e étant une date de fin pour un projet, il est suppose de me donner ce dont j'ai besoin ... non?

Où je suis supposé obtenir dire 12 jours restants, je reçois 1 an 12 jours.

et où $e = 0000-00-00 (dans le cas où l'utilisateur n'a pas entré de date de fin), je reçois 40 ans 10 mois et 26 jours restants.

J'ai essayé beaucoup de variations différentes à mes calculs mais je continue à obtenir nulle part.

Répondre

2

dates réelles Store, pas des chaînes, et vous pouvez simplement demander la base de données de la différence.

SELECT DATEDIFF(CURRENT_DATE, end) FROM table 

Si vous allez juste diviser les choses par 365 vous n'obtiendrez pas de résultats précis. Pas chaque année a 365 jours.

4

Pourquoi voudriez-vous réinventer la roue? Utilisez date_diff:

<?php 
$datetime1 = date_create('2009-10-11'); 
$datetime2 = date_create('2009-10-13'); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%R%d days'); 
?> 
+0

mes compétences en php sont modérées, réinventer la roue vient avec ce lol. date_diff hmmm. Je vais regarder de plus près! Merci – Eli

+1

@ s2xi à chaque fois que vous avez envie de faire une fonction générique, regardez d'abord sur php.net, vous pourriez être surpris! –

Questions connexes