[PHP] strtotime & date function - returned verkeerde waarde?

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
Haj!

Wegens een incompetent calendar script dat alleen vaste waardes slikt zit ik momenteel vast aan een PHP script schrijven die maandelijks (cronjob) alle waarden overschrijft met nieuwe maanden.

Het gaat hier om een calendar die 12 maanden vooruit gaat. Géén jaarkalendar dus, maar 12-maanden.
Nu loop ik tegen het volgende probleem aan als ik het verschil in jaar op wil slaan in een variable:

Dit stukje code:
PHP:
1
2
3
4
5
if(date("Y",strtotime('+0 month') == date("Y",strtotime('+12 month')))) 
{ 
$year = date("Y",strtotime('+12 month')); 
echo $year; 
}

returned 2007, in plaats van de verwachte 2006.

Maak ik hier nu een enorme denkfout, zie ik iets over het fout, of is dit gewoon een fout in PHP?

Ik wil het overigens het liefst zo oplossen, omdat ik anders met een X aantal if'jes zit voor elk jaar. :)

[ Voor 6% gewijzigd door r0b op 03-03-2006 11:45 ]


Acties:
  • 0 Henk 'm!

  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Die eerste test volgens mij nooit waar zijn. Welke maand je ook neemt, het is twaalf maanden later altijd een nieuw jaar.

Werkt je echo wel?
Echo eens de beide jaren die in je if statement staan.

[ Voor 77% gewijzigd door WvdWest op 03-03-2006 12:20 ]

I'm not a complete idiot - several parts are missing.


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
WvdWest schreef op vrijdag 03 maart 2006 @ 12:17:
+12 months is toch 2007? Dus is het toch logisch dat 2007 als waarde wordt teruggegeven?
Maar ik doe een if +0 month == +12 month, dus:
- Komt het overeen (onmogelijke situatie, +12 maanden is immers altijd het volgende jaar, dus misschien had ik beter +11 month als voorbeeld kunnen pakken), echo dan de output ($year)
- Komt het niet overeen, dan gebeurt er niks

PHP:
1
echo date("Y",strtotime('+0 month'));

en
PHP:
1
echo date("Y",strtotime('+12 month'));

werken in een echo zelf gewoon goed. Maw; de eerste returned 2006, en de andere 2007.

[ Voor 18% gewijzigd door r0b op 03-03-2006 12:24 ]


Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Die eerste test kan inderdaad nooit waar zijn. Daarnaast is 2007 toch gewoon de verwachte waarde? Wat gaat er fout?

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Probeer nog eens uit te leggen wat er precies fout gaat. Je vergelijkt nu twee waarden die per definitie nooit gelijk kunnen zijn. De code in je if statement wordt dus nooit uitgevoerd.

Mocht die code wel worden uitgevoerd dan krijg je het jaar van een datum die 12 maanden verder ligt. Aangezien het dan 2007 is, krijg je dus 2007.

Dit is volkomen logisch. Vraag is dus, waarom jij verwacht dat er 2006 uit komt.

I'm not a complete idiot - several parts are missing.


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
WvdWest schreef op vrijdag 03 maart 2006 @ 12:26:
Probeer nog eens uit te leggen wat er precies fout gaat. Je vergelijkt nu twee waarden die per definitie nooit gelijk kunnen zijn. De code in je if statement wordt dus nooit uitgevoerd.

Mocht die code wel worden uitgevoerd dan krijg je het jaar van een datum die 12 maanden verder ligt. Aangezien het dan 2007 is, krijg je dus 2007.

Dit is volkomen logisch. Vraag is dus, waarom jij verwacht dat er 2006 uit komt.
Sorry, verkeerde interpretatie aan mijn kant. Ik verwacht eigenlijk geen output.
+0 month en +12 month kunnen immers nooit gelijk zijn (==), dus moet hij ook niet $year echo'en.

Of denk ik dan echt verkeerd :?

Wat ik in het kort probeer te bewerkstelligen:
Zodra een +X month in een nieuw jaar valt, moet het jaartal in een variable opgeslagen worden.
(Zodat ik deze weer dmv een year=$year param aan het bestaande script kan voeren)

Bijvoorbeeld; we zitten nu in 03-2006. +10 month is 01-2007, in dit geval '2007' in een variable hebben.

[ Voor 21% gewijzigd door r0b op 03-03-2006 12:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Bouw je if-statement eens opnieuw op, en je zult zien dat je haakjes verkeerd staan.
Deze code levert wel de goede output op:

PHP:
1
2
3
4
$nextyear = date("Y", strtotime("+12 months"));
if(date("Y", strtotime("+0 months")) == $nextyear) {
    echo $nextyear;
}


Kortom, even goed naar de haakjes kijken ;-)
En zoals vaker vermeld wordt, kan je if-statement nooit `true` opleveren, maar daar was je zelf ook al achter volgens mij.

Opmerking: niet alleen mijn code blind overnemen, maar even goed kijken naar je eigen opbouw dus. Succes.

[ Voor 17% gewijzigd door Verwijderd op 03-03-2006 12:31 ]


Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Er moet sowieso een haakje voor die == staan voor het eerste deel van je statement idd :)
Volgens mij krijg je daarna toch al wat je verwacht, dus niks ?

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
Verwijderd schreef op vrijdag 03 maart 2006 @ 12:31:
Bouw je if-statement eens opnieuw op, en je zult zien dat je haakjes verkeerd staan.
Deze code levert wel de goede output op:

PHP:
1
2
3
4
$nextyear = date("Y", strtotime("+12 months"));
if(date("Y", strtotime("+0 months")) == $nextyear) {
    echo $nextyear;
}


Kortom, even goed naar de haakjes kijken ;-)
En zoals vaker vermeld wordt, kan je if-statement nooit `true` opleveren, maar daar was je zelf ook al achter volgens mij.

Opmerking: niet alleen mijn code blind overnemen, maar even goed kijken naar je eigen opbouw dus. Succes.
Verhip. Dat ik daar niet naar gekeken heb. :X

Ik ga er even mee verder; bedankt voor het aanwijzen ervan. :)

Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

Volgens mij heeft het nog ergens mee te maken, met het feit dat hij "+12 month" (enkelvoud dus!!) doet, en dit moet meervoud zijn voor zover ik weet...

PHP:
1
2
3
4
if (date("Y",time()) == date("Y",strtotime('+12 month'))) {  
$year = date("Y",strtotime('+12 month'));
echo $year;  
}

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
xces schreef op vrijdag 03 maart 2006 @ 13:21:
Volgens mij heeft het nog ergens mee te maken, met het feit dat hij "+12 month" (enkelvoud dus!!) doet, en dit moet meervoud zijn voor zover ik weet...

PHP:
1
2
3
4
if (date("Y",time()) == date("Y",strtotime('+12 month'))) {  
$year = date("Y",strtotime('+12 month'));
echo $year;  
}
month en/of months maakt niet uit. Dit werkt allebei. :)
(Ook het geval met second/seconds, minute/minutes, hour/hours, day/days, week/week, year/years geloof ik :) )

Overigens draait alles nu naar volle tevredenheid. :)

[ Voor 13% gewijzigd door r0b op 03-03-2006 13:35 ]

Pagina: 1