Berekeningen met datum

Status
Niet open voor verdere reacties.

ManuNeko

Gebruiker
Lid geworden
24 jun 2009
Berichten
110
Ik heb een probleem met het verschil te berekenen met datums.

01/09/2000 -> 31/10/2000 geeft 1 maand terwijl dit eigenlijk 2 maand is;
01/05/2001 -> 31/08/2001 geeft 4 maand wat dan weer correct is.

Kan iemand mij eens vertellen wat het verschil is en wat ik dan fout doe?
 
Lastig te zeggen als we niet weten hoe je het berekent.
 
Daar zou je wel eens gelijk in kunnen hebben...

De berekening gebeurt als volgt:

Code:
  while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
    {
      $Van = date_create($row{'Van'});	
      $Tot = date_create($row{'Tot'});
      $GAVan = date_create($row{'Van'});
      $GATot = date_create($row{'Tot'});
      if (date_format($GAVan, 'd') != '01')
	{
	     date_modify($GAVan, '+1 month');
	     $GAVan = date_create(date_format($GAVan, 'Y/m') . '/01');
	}
      // Als tot datum de laatste van de maand is ==> OK; anders zet dag op 1 en trek een dag af
     $LastOfMonth = date_create(date_format($GATot, 'Y/m') . '/01');
     date_modify($LastOfMonth, '+1 month');
     date_modify($LastOfMonth, '-1 day');
     if ($LastOfMonth != $GATot)
	{
          $GATot = date_create(date_format($GATot, 'Y/m') . '/01');
          date_modify($GATot, '-1 day');
	 }
     print "<tr><td>" . date_format($Van, 'd/m/Y') . "</td>";
     print "<td>" . (is_null($Tot) ? "&nbsp;" : date_format($Tot, 'd/m/Y')) . "</td>";
     print "<td>" . date_format($GAVan, 'd/m/Y') . "</td><td>" . date_format($GATot, 'd/m/Y') . "</td>";
     print "<td align ='right'>" . number_format($row{'Percentage'} * 100, 0, ',', '.') . "%</td>";
     $GAInter = date_diff($GAVan, $GATot);
     print "<td align ='right'>" . $GAInter->format('%R %y j %m m') . "</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
   }

De datum wordt elke keer op dezelfde manier berekend en toch zit er een verschil in bij de eerste en de rest.
 
Ik heb dan maar zelf een functie gemaakt om het verschil in maanden te berekenen:

Code:
function MonthDiff($VanDiff, $TotDiff)
{
  $MVan = date_format($VanDiff, 'm')*1; // Vermenigvul met 1 om er een integer van te maken
  $YVan = date_format($VanDiff, 'Y')*1;
  $MTot = date_format($TotDiff, 'm')+1;
  $YTot = date_format($TotDiff, 'Y')*1;
  return ($YVan==$YTot ? $MTot-$MVan : (($YTot - $YVan - 1) * 12)+(12 - $MVan + 1)+($MTot - 1));
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan