php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #18736 mktime gives an unexpected value
Submitted: 2002-08-04 16:10 UTC Modified: 2002-08-05 07:20 UTC
From: fabian dot eidner at firemail dot de Assigned:
Status: Not a bug Package: Date/time related
PHP Version: 4CVS-2002-08-04 OS: Win2000
Private report: No CVE-ID: None
 [2002-08-04 16:10 UTC] fabian dot eidner at firemail dot de
Hello everybody,

I have programmed a routine, which calculates the difference "erg" between the two dates "bis" minus "von". This works out well for many values, but for the combination

   $von = mktime(0,0,0,1,1,2002);
   $bis = mktime(0,0,0,5,13,2002);

a wrong value is going to be calculated (erge and erge2 produce floating values instead of integer values).

Please have a look at the following source code (especially the following two lines):

   $von = mktime(0,0,0,$t1,$t2,$t3);
   $bis = mktime(0,0,0,$t4,$t5,$t6);


-----

<html>
<head>
<title>-----[ Ger?te Bestellung ]-----</title>
<style type="text/css">
<!--
 a:link { text-decoration:none; font-weight:bold; color:#AFAFAF; }
 a:visited { text-decoration:none; font-weight:bold; color:#AFAFAF; }
 a:hover { text-decoration:none; font-weight:bold; color:#FFBF00; }
 a:active { text-decoration:none; font-weight:bold; color:#FFFF00; }
-->
</style>
</head>
<body text="#000000" bgcolor="#EFEFEF" link="#FF0000" alink="#FFFF00" vlink="#FF0000">
<?
  echo "<font color='#0060FF' size='+1'>Ger?te Reservierung</font>";
  echo "<hr noshade size='1' color='#0060FF'><br><br>";
  echo "<form action='order.php?action=send3&$t1&$t2&$t3&$t4&$t5&$t6&$id&$coast' method='post'><table bordercolor='1' width='750' height='550'><tr><td colspan='4'><font color='#0060FF'><b>Bestell-Formular</b></font></td></tr><tr><td colspan='4'><font color='#0000FF'><b>Hinweis:</b></font><br>Bitte tragen sie in das unten stehende Formular:<br><font color='#FF0000'>Name u. vor Name:</font><br>und<br><font color='#FF0000'>Kostenstelle ein.</font><br>Ebenso sollten sie nicht vergessen das gew?nschte Ger?t auszusuchen.<br>Bei von bis geben sie den Zeitraum der Bestellung ein.</td></tr><tr><td>Name:&nbsp;&nbsp;<input type='Text' name='id' value='' size='20' maxlength='30'>&nbsp;</td><td>Kostenstelle:&nbsp;&nbsp;&nbsp;<input type='Text' name='coast' value='' size='9' maxlength='9'>&nbsp;&nbsp;&nbsp;<font color='#FF0000'>ohne (0)</font></td><td colspan='2'>Ger?t:&nbsp;&nbsp;&nbsp;<select name='Teile' size='1'><option value='Beamer'>Beamer<option value='Laptop'>Laptop</select></td></tr><tr><td colspan='4'><textarea name='bem' cols='90' rows='3'></textarea></td></tr><tr><td colspan='4'><font color='#0000FF'><b>Hinweis:</b></font><br>Bitte geben sie ein vollst?ndiges Datum an, z.B. 04<font color='#0000BF'>(Monat)</font>.05<font color='#0000BF'>(Tag)</font>.2002<font color='#0000BF'>(Jahr)</font></td></tr><tr><td colspan='2'>Von:<br>Monat:&nbsp;<select name='t1' size='1'><option value='1'>1<option value='2'>2<option value='3'>3<option value='4'>4<option value='5'>5<option value='6'>6<option value='7'>7<option value='8'>8<option value='9'>9<option value='10'>10<option value='11'>11<option value='12'>12</select>&nbsp;Tag:&nbsp;<select size='1' name='t2'><option value='1'>1<option value='2'>2<option value='3'>3<option value='4'>4<option value='5'>5<option value='6'>6<option value='7'>7<option value='8'>8<option value='9'>9<option value='10'>10<option value='11'>11<option value='12'>12<option value='13'>13<option value='14'>14<option value='15'>15<option value='16'>16<option value='17'>17<option value='18'>18<option value='19'>19<option value='20'>20<option value='21'>21<option value='22'>22<option value='23'>23<option value='24'>24<option value='25'>25<option value='26'>26<option value='27'>27<option value='28'>28<option value='29'>29<option value='30'>30<option value='31'>31</select>&nbsp;Jahr:&nbsp;<select size='1' name='t3'>"; include ("TXT/von_m.txt");echo "</select><br>Bis:<br>Monat:&nbsp;<select size='1' name='t4'><option value='1'>1<option value='2'>2<option value='3'>3<option value='4'>4<option value='5'>5<option value='6'>6<option value='7'>7<option value='8'>8<option value='9'>9<option value='10'>10<option value='11'>11<option value='12'>12</select>&nbsp;Tag:&nbsp;<select size='1' name='t5'><option value='1'>1<option value='2'>2<option value='3'>3<option value='4'>4<option value='5'>5<option value='6'>6<option value='7'>7<option value='8'>8<option value='9'>9<option value='10'>10<option value='11'>11<option value='12'>12<option value='13'>13<option value='14'>14<option value='15'>15<option value='16'>16<option value='17'>17<option value='18'>18<option value='19'>19<option value='20'>20<option value='21'>21<option value='22'>22<option value='23'>23<option value='24'>24<option value='25'>25<option value='26'>26<option value='27'>27<option value='28'>28<option value='29'>29<option value='30'>30<option value='31'>31</select>&nbsp;Jahr:&nbsp;<select size='1' name='t6'>"; include ("TXT/bis_m.txt");echo "</select></td><td></td></tr><tr><td colspan='4'><input type='Submit' name='Sub' value='Senden'>&nbsp;&nbsp;<input type='reset'></input></td></tr></table></form>";

if($action == "send3")
  {
   if($t1 && $t2 && $t3 && $t4 && $t5 && $t6 < 1 || $t1 > 12 || $t4 > 12|| $t2 > 31 || $t5 > 31 || $t3 < 1970 || $t6 < 1970 || $t3 > $t6 || $t1==$t4 && $t2==$t5 && $t3==$t6)
   {
    echo "Sie haben kein Datum oder ein falsches Datum eingegeben.";
   }
   else
   {
   echo "Von:<br>";
   echo mktime(0,0,0,$t1,$t2,$t3)." | ";
   echo date("D F Y", mktime(0,0,0,$t1,$t2,$t3));
   echo "<br>Bis:<br>";
   echo mktime(0,0,0,$t4,$t5,$t6)." | ";
   echo date("D F Y", mktime(0,0,0,$t4,$t5,$t6));
   $von = mktime(0,0,0,$t1,$t2,$t3);
   $bis = mktime(0,0,0,$t4,$t5,$t6);
   $erg = $bis-$von;
        if ($erg <=0)
        {
        echo "<br><center><font color='#FF0000'>Sie haben eine ung?ltige Eingabe gemacht!!!</font></center>";
        }
        else if($Teile == "Beamer")
        {
        $erge = $erg/86400;
        $erge2 = (($erge-1)*(30))+50;
        echo "<br>Datum erstellt...";
        echo "<br>Name:&nbsp;<font color='#0000DF'><b>".$id."</b></font>";
        echo "<br>Kostenstelle:&nbsp;<font color='#0000DF'><b>".$coast."</b></font>";
        echo "<br>Das selektierte Ger?t ist ein: <font color='#0000BF'><b>Beamer</b></font>";
        echo "<br>Die Kosten belaufen sich auf: <font color='#FF0000'><b>".$erge2."</b>Euro</font>";
        echo "<br>Sie haben folgende Bemerkung gemacht: <font color='#FF0000'><b>".$bem."</b></font>";
        echo "<center><form action='order2.php' method='post'><table border='1' bgcolor='#0070C0' width='670'><tr><td colspan='2'><font color='#FFFFFF'><b>Bitte ?berpr?fen Sie die Eingaben und vergewissern Sie sich das alles korrekt ausgef?llt ist!!!</font></td></tr><tr><td><input type='Submit' name='Sub2' value='Senden'></input></td><td><a href='order.php'><b>Daten neu eingeben</b></a></td></tr></table></form></center>";
        }
        else if($Teile == "Laptop")
        {
        $erge = $erg/86400;
        $erge2 = (($erge-1)*(50))+70;
        echo "<br>Datum erstellt...";
        echo "<br>Name:&nbsp;<font color='#0000DF'><b>".$id."</b></font>";
        echo "<br>Kostenstelle:&nbsp;<font color='#0000DF'><b>".$coast."</b></font>";
        echo "<br>Das selektierte Ger?t ist ein: <font color='#0000BF'><b>Laptop</b></font>";
        echo "<br>Die Kosten belaufen sich auf: <font color='#FF0000'><b>".$erge2."</b>Euro</font>";
        echo "<br>Sie haben folgende Bemerkung gemacht: <font color='#FF0000'><b>".$bem."</b></font>";
        echo "<center><form action='order2.php' method='post'><table border='1' bgcolor='#0070C0' width='670'><tr><td colspan='2'><font color='#FFFFFF'><b>Bitte ?berpr?fen Sie die Eingaben und vergewissern Sie sich das alles korrekt ausgef?llt ist!!!</font></td></tr><tr><td><input type='Submit' name='Sub2' value='Senden'></input></td><td><a href='order.php'><b>Daten neu eingeben</b></a></td></tr></table></form></center>";
        }
   }
  }
?>
</body>
</html>

Best regards,

Fabian Eidner

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-08-04 16:17 UTC] sander@php.net
<?php
var_dump(mktime(0, 0, 0, 1, 1, 2002));             
var_dump(mktime(0, 0, 0, 5, 13, 2002));
?>
gives me
int(1009839600)
int(1021240800)

You're probably doing something wrong. Ask support questions on the appropriate mailinglist.
 [2002-08-05 05:35 UTC] fabian dot eidner at firemail dot de
Hello everybody,
the problem is if I calculate $bis-$von the result is: $erg 11401200 until here is all ok then i calculate $erge = $erg/86400(one day) the result of this is incorrect = 131.95833333333

Waht should i doo now?
 [2002-08-05 07:20 UTC] hholzgra@php.net
the result is absolutely correct as the difference
between january 1st and may 13th is 134 days and 23 hours

If you still don't see the fault in your assumption than please ask on the appropriate mailinglist.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat May 04 16:01:31 2024 UTC