[PHP] Verschil in datum omzetten in aantal dagen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een website waarbij ik van twee verschillende datums
bijvoorbeeld 2007-01-11 en 2007-07-01 om wil zetten in het vershil in dagen tussen deze 2 datums.
Is dit eigenlijk wel mogelijk ?
Ik ben al bezig geweest om ze om te zetten in timestamps en daar mee te rekenen maar wil nog niet echt lukken kan iemand me in de juiste richting helpen ?

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

In Welkom in Programming - FAQ en Beleid kan je lezen dat we toch wat zelf inzet verwachten...

Als je zelf al wat hebt uitgeprobeerd, waarom post je dan niet de code met de aanwijzing waar je precies op vastloopt? ;)

Letterlijk [google=php get difference in days] geeft mij de volgende relevante hits:
http://www.w3schools.com/php/php_ref_date.asp
http://nl2.php.net/date

Waarbij de tweede zelfs de volgende tekst heeft staan:
Here is a very easy way to get the difference, in days, between two dates:
Succes verder ;)

[ Voor 39% gewijzigd door BtM909 op 11-01-2007 14:12 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je het uit een database haalt: datediff. Anders kun je twee timestamps nemen (in seconden) en de kleinste van de grootste aftrekken om het aantal seconden ertussen te krijgen. Het aantal dagen is dan vrij simpel, al moet je oppassen met zomer- en wintertijd en schrikkelseconden. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        $inp_datum_een = '2007-01-10';
        $inp_datum_twee = '2007-01-15';
        $datum1 = explode("-", $inp_datum_een);
        $datum2 = explode("-", $inp_datum_twee);

        $date_array = explode('-',$datum);
        $datumStamp1 =  mktime (0,0,0, $datum1[1], $datum1[0], $datum1[2]);
        $datumStamp2 = mktime (0,0,0, $datum2[1], $datum2[0], $datum2[2]);
        
        echo    $datumStamp1. '<br>';
        echo    $datumStamp2. '<br>';
        $verschilStamp = $datumStamp2-$datumStamp1;
        
        echo $verschilStamp.'<br>';


dan is als ik het goed heb $verschilStamp het verschil in seconden.
dit kan ik dus delen door 60 heb ik het aantal minuten enz enz tot ik bij dagen ben of denk ik nu te makelijke?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dat kan een stuk korter, maar in de kern kun je het wel zo aanpakken ja. Maar zoals ik al zei: super precies wordt het niet door zomer/wintertijd en schrikkelseconden die voor kunnen komen. :)
PHP:
1
2
3
4
5
6
7
8
9
10
        $inp_datum_een = '2007-01-10';
        $inp_datum_twee = '2007-01-15';
        $datumStamp1 = strtotime($inp_datum_een);
        $datumStamp2 = strtotime($inp_datum_twee);
        
        echo $datumStamp1. '<br>';
        echo $datumStamp2. '<br>';
        $verschilStamp = $datumStamp2-$datumStamp1;
        
        echo $verschilStamp.'<br>';

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
is daar een niet al te gecompliceerde oplossing voor te vinden voor die schrikkeljaren etc ?

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Je zou de dagen op 12:00 's middags kunnen zetten, zodat je je uitkomst in seconden kunt delen door 24*3600 en dan kunt afronden.

@loyd1000: het probleem zit hem niet zo in schrikkelJAREN...het probleem zit hem erin dat een dag niet altijd 24*3600 seconden telt, maar er wel eens een uur meer of minder heeft.

[ Voor 41% gewijzigd door KabouterSuper op 11-01-2007 15:03 ]

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

In SQL heb je daar datediff voor, maar PHP lijkt geen vergelijkbare functie te hebben zo te zien. Je kan er wel omheen werken door met strtotime en de intervallen (+1 month, +1 week, +1 day, enz.) steeds de kleinste datum op te hogen tot je op de grootste datum uitkomt, en intussen variabelen bij te houden voor het aantal maanden/weken/dagen/enz. Dat klinkt wat omslachtig maar ik zie dus zo snel geen andere functie in de handleiding die het voor je kan doen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
waarom niet gewoon met datediff werken ik ben eruit dankuwel :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

KabouterSuper schreef op donderdag 11 januari 2007 @ 15:01:
@loyd1000: het probleem zit hem niet zo in schrikkelJAREN...het probleem zit hem erin dat een dag niet altijd 24*3600 seconden telt, maar er wel eens een uur meer of minder heeft.
Soms ook één of twee seconden meer. ;) In dat geval is 31-12-2005 0:00 + 60 * 60 * 24 seconden niet 1-1-2006 0:00 maar 31-12-2005 23:60. :)
offtopic:
Die datum koos ik trouwens niet toevallig. ;)
Verwijderd schreef op donderdag 11 januari 2007 @ 15:20:
waarom niet gewoon met datediff werken ik ben eruit dankuwel :)
Dat zei ik in mijn eerste reactie al. :+

[ Voor 7% gewijzigd door NMe op 11-01-2007 15:28 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1