[php] aantal dagen tussen 2 data

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
ik wil dus het aantal dagen weten tussen 2 bepaalde data..

ik had dus bedacht om beide data om te zetten naar een unix timestamp, dan van elkaar af te trekken .. en dan nog es delen door (60*60*24) .
als ik echter met mktime() er een timestamp van maak krijg ik een negatief getal?! ..

dit is de code die ik gebruik:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$calculate_date_start = 
mktime(substr($row_total->start_date, 8, 2),
substr($row_total->start_date, 10, 2), 
00, 
substr($row_total->start_date, 4, 2),
substr($row_total->start_date, 4, 2),
substr($row_total->start_date, 0, 4));

$calculate_date_end = 
mktime(substr($row_total->end_date, 8, 2),
substr($row_total->end_date, 10, 2),
00,
substr($row_total->end_date, 4, 2),
substr($row_total->end_date, 4, 2),
substr($row_total->end_date, 0, 4));


de end en start date zitten zo in de dbase:
200307071400

als ik de $row_total->end_date en $row_total->start_date echo dan blijken die gewoon te kloppen.

het gaat dus niet goed bij de mktime()
iemand die ziet wat er fout gaat?

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Zelf gebruik ik deze functies:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?PHP
function getlmktime ($timeStamp) 
 {
   return date("F d Y h:i A", 
  $timeStamp); 
 }

function gettime ()
 {
  return strtotime(date ("F d, Y h:i:s A"));
 } 
PHP?>


Met gettime() maak je een tijd in integer en met getlmktime zet je de integer weer in een datum om.

Als je 2 verkregen integers dan van elkaar aftrekt en deelt door 60*60*24 dan krijg je het aantal dagen.

Dus
PHP:
1
2
3
<?PHP
$aantal_dagen = ($oude_tijd - gettime()) / (60*60*24);
PHP?>

[ Voor 33% gewijzigd door TRON op 07-07-2003 14:24 ]

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

Verwijderd

Even getest:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
// even simuleren van je record
$row_total = new stdClass;
$row_total->end_date = 200307071400; // data uit de db komt

$calculate_date_end =
mktime(substr($row_total->end_date, 8, 2),
substr($row_total->end_date, 10, 2),
0, // 00 is hetzelfde als 0
substr($row_total->end_date, 4, 2),
substr($row_total->end_date, 6, 2), // dit moet 6, 2 zijn en niet 4,2
substr($row_total->end_date, 0, 4));

echo date("r", $calculate_date_end); // datum afdrukken
?>

Het bovenstaande geeft een juiste uitkomst.

Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
omg .. snap werkelijk niet hoe ik dit heb kunnen doen..
heb het zelfs nog getest of alles afzonderlijk er goed uitkwam.. en dan nog zo iets doms doen.. damn.. |:(
thx sKiLL4 :)

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Waarom laat je mysql dit niet opknappen :?
MySQL:
1
SELECT TO_DAYS(enddate)-TO_DAYS(startdate) AS verschil FROM table


Scheelt je een hoop ellende :)