[PHP] month+1, jaarovergang

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dag,

ik heb een klein probleempje met een scriptje waarbij ik een concertagenda voor de komende 3 maanden wil weergeven.

Ik heb het nu als volgt:

$n = date("n");
$n2 = date("n")+1;
$n3 = date("n")+2;

Dit werkt goed, hij geeft de huidige maand, de volgende en die daar weer op volgt.

Maar bij de overgang van december naar januari geeft ie niets meer weer.
Als ik dus bijvoorbeeld +7 verruil voor +2.

Weet iemand misschien wat ik hier het beste aan zou kunnen doen?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Kun je niks met strtotime? strtotime("+1 month") bijvoorbeeld?

'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!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
ASP kent de DateAdd functie die zelf bepaald of er een volgende minuut / uur / dag / etc. begint... Met [google=php dateadd] kom je dan snel hier uit http://www.asp-php.net/tu...glossaire.php?glossid=35:

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • xos
  • Registratie: Januari 2002
  • Laatst online: 12-09 12:41

xos

Ik begrijp je probleem niet zo, maar zou het probleem niet verholpen zijn als je modulo 12 erop loslaat?

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
De date functie accepteerd ook een unix timestamp, je kunt een unixtimestamp genereren en daar dan een x aantal seconden bij optellen en deze nieuwe weer meegeven aan de date functie?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Sybr_E-N schreef op zondag 05 juni 2005 @ 21:08:
De date functie accepteerd ook een unix timestamp, je kunt een unixtimestamp genereren en daar dan een x aantal seconden bij optellen en deze nieuwe weer meegeven aan de date functie?
Het probleem is dat je nooit weet hoeveel seconden een maand duurt. Je kan dan wel met mktime gaan werken, maar dan lijkt me de oplossing van -NME- een stuk beter.

Acties:
  • 0 Henk 'm!

  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 20-09 11:06
als je maand december is dan is je date("n") 12.
als je daar een bij optelt krijg je een maand die wij op deze planeet niet kennen...
het is makkelijk op te lossen door te doen


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$n = date("n");

if ($n == "11")
 {
  $n2 = 12;
  $n3 = 1;
 }
elseif
 {
  $n2 = 1;
  $n3 = 2;
}
else
 {
  $n2 = date("n") + 1;
  $n3 = date("n") + 2;
 }


mischien niet de beste manier...
maar werkt wel op deze manier ;)

[ Voor 13% gewijzigd door FireDrunk op 05-06-2005 21:19 ]

Even niets...


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

thijs_cramer, als je het al zo in code op wil lossen, dan liever op de manier die xos al noemde:
PHP:
1
2
$n = (date("n") + 1) % 12;
$n = ($n == 0) ? 12 : $n;

Of iets dergelijks. :P

'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
De manier van NMe werkt perfect, bedankt!

Ik heb het nu zo gedaan:

$n2 = date("n", strtotime("+1 month"));

[ Voor 13% gewijzigd door Verwijderd op 05-06-2005 21:27 ]


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
GlowMouse schreef op zondag 05 juni 2005 @ 21:10:
[...]

Het probleem is dat je nooit weet hoeveel seconden een maand duurt. Je kan dan wel met mktime gaan werken, maar dan lijkt me de oplossing van -NME- een stuk beter.
Waarom niet, valt gewoon uit te rekenen hoor. Gewoon gebruik maken van de bestaande functies als strtotime(), die genereren een unixtimestamp waarmee date weer een mooite datum van maakt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Even nog een vraagje over hoe je dat dan doet bij MySQL, want daar werkt strtotime natuurlijk niet.

$query= "SELECT * FROM optredens
WHERE MONTH(NOW())+2 = MONTH(datum)
AND YEAR(CURRENT_DATE) = YEAR(datum)";

Hier is het probleem eigenlijk hetzelfde, hij loopt niet door bij de jaarovergang en
bij het weergeven van januari geeft hij nog steeds het huidige jaar door, terwijl dat dan 2006 zes moet zijn. Dus YEAR(CURRENT_DATE)+1 maar dan alleen als de maand = 11 of 12. Heeft iemand misschien een idee?

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Kijk eens in het manual wat betreft date en time functies. Zoiets zou het moeten doen:
code:
1
2
3
$query= "SELECT * FROM optredens
WHERE MONTH(DATE_ADD(NOW(), INTERVAL 2 MONTH)) = MONTH(datum)
AND YEAR(CURRENT_DATE) = YEAR(datum)";

[ Voor 5% gewijzigd door T-MOB op 06-06-2005 09:58 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat geeft precies hetzelfde resultaat. Als ik voor 2 een 7 invul en dus in januari 2006 uitkom, geeft ie niets weer, terwijl er wel iets in de database staat uit januari 2006. Dit komt dus omdat ie dan YEAR ook met 1 moet verhogen, maar ik kom er met de de manual niet uit hoe dat te doen.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ja, duh. Maar dan tel je de twee maanden er toch ook bij op in de year vergelijking:
code:
1
2
3
4
5
6
7
8
9
10
11
"SELECT * FROM optredens
WHERE MONTH(DATE_ADD(NOW(), INTERVAL 2 MONTH)) = MONTH(datum)
AND YEAR(DATE_ADD(NOW(), INTERVAL 2 MONTH)) = YEAR(datum)";

/*wat netter te schrijven is als: */
"SELECT *, DATE_ADD(NOW(), INTERVAL 2 MONTH) as testdate
FROM optredens
WHERE MONTH(testdate) = MONTH(datum)
AND YEAR(testdate) = YEAR(datum)";

/* wat ongetwijfeld nog beter in te korten valt... */

[ Voor 3% gewijzigd door T-MOB op 06-06-2005 10:22 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ow oké, das waar ja. Sorry dat ik van die eenvoudige stomme vragen stel, ik zit me vaak zolang scheel te kijken op dat scherm en ga alleen maar moeilijker denken. Die manual is ook erg onoverzichtelijk vind ik zelf. Is daar niet iets degelijkers voor en misschien in het nederlands?

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op maandag 06 juni 2005 @ 10:30:
Ow oké, das waar ja. Sorry dat ik van die eenvoudige stomme vragen stel, ik zit me vaak zolang scheel te kijken op dat scherm en ga alleen maar moeilijker denken. Die manual is ook erg onoverzichtelijk vind ik zelf. Is daar niet iets degelijkers voor en misschien in het nederlands?
In het Nederlands wens ik je veel succes, maar in het Engels zijn er meer dan genoeg goede boeken te vinden :) En de meesten kun je ook via BOL of Proxis bestellen nu de dollar wat minder gunstig staat :)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 20:52
Andere methode:
$n = date("n");
$n2 = date("n",mktime(0,0,0,$n + 1));
$n3 = date("n",mktime(0,0,0,$n + 2));

[ Voor 21% gewijzigd door EdwinG op 06-06-2005 11:15 ]

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
PHP:
1
2
3
4
5
6
7
function maandlater($vandaag) 
{
list($dag, $maand, $jaar) = split('[-.-]', $vandaag);
$maandlater=$maand+1;
$nieuwdatum=date ("d-m-Y", mktime (0,0,0,$maandlater,$dag,$jaar));
return $nieuwdatum;
}


Waarbij vandaag in dd-mm-jjjj format wordt aangeleverd.

[ Voor 8% gewijzigd door Peedy op 06-06-2005 18:47 ]

Pagina: 1