Bij wijziging tijdnotatie datum wordt 31-12-1969?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Willem Jan

Willem Jan

15/04/2004 14:02:00
Quote Anchor link
Ik ben bezig met het maken van een geautomatiseerde agenda, dat wil zeggen een agenda waar ik naar hartelust items aan kan toevoegen, maar waarvan maar een select gedeelte wordt weergegeven, namelijk de items vanaf de huidige datum tot 30 dagen vooruit.

Ik selecteer de data uit een mysql database. Ik heb de code er twee keer in staan, waarbij er bij de tweede loop (na de else) een extra selectie criterium geldt omdat er ook items zijn die alleen weergegeven mogen worden nadat er ingelogd is.

Het lukt me uitstekend om alleen items weer te geven die in de toekomst liggen. Bij het maken van een de variabele voor de datum 30 dagen in de toekomst gaat iets verkeerd.

De datum moet namelijk in de notatie: Y.m.d. staan.

Het optellen van 30 dagen gaat uitstekend wanneer ik onderstaande code gebruik:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$datum1
=date("m.d.Y.", mktime(0, 0, 0, date("m")  , date("d") +30, date("Y")  ));
?>

Dit geeft als return mooi 15 mei (vandaag is 15 april)

Gebruik ik echter de notatie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$datum1
=date("Y.m.d.", mktime(0, 0, 0, date("Y"), date("m")  , date("d") +30   ));
?>


Dan krijg ik als return: 1969-12-31

De code waarin ik het wil gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
          $datum
=(date("Y-m-d"));
          $datum2=(date("Y-m-d", mktime(0, 0, 0, date("m")  , date("d") +30, date("Y")  )));
          echo("<table border=\"1\" width=\"75\" cellspacing=\"0\">\n
                <tr><td class=\"login\"><span class=\"t2\"> </span></td><td class=\"login\"><span class=\"t2\">Agenda</span></td></tr>\n"
);
          if (isset($_SESSION["userid"]))
          {

          $agendaint=("SELECT * FROM pddb_agenda WHERE item_date >= '".$datum."' ORDER BY item_date");
          $agendaresultint = mysql_query($agendaint) or die ("FOUT : " . mysql_error());
            while (list($item_id, $item_date, $item_omschr, $item_link, $item_lid_id, $item_display) =
            mysql_fetch_row($agendaresultint))
            {

            echo("<tr><td><span class=\"t2\">$item_date</span></td><td class=\"login\"><span class=\"t2\">$item_omschr</span></td></tr>\n");
            }
          }

          else
          {
          $agendaext=("SELECT * FROM pddb_agenda WHERE item_date >= '".$datum."' AND item_display='2' ORDER BY item_date");
          $agendaresultext = mysql_query($agendaext) or die ("FOUT : " . mysql_error());
            while (list($item_id, $item_date, $item_omschr, $item_link, $item_lid_id, $item_display) =
            mysql_fetch_row($agendaresultext))
            {

            echo("<tr><td><span class=\"t2\">$item_date</span></td><td class=\"login\"><span class=\"t2\">$item_omschr</span></td></tr>\n");
            }
          }

          echo("</table>\n");
          ?>


Variabele $datum2 moet dan nog als extra argument worden toegevoegd aan beide selectiequery's

Iemand een idee hoe ik die 30 dagen er toch in de notatie Y.m.d. bij op kan tellen?

Ik wil niet met timestamps gaan werken omdat ik weet dat dat niet nodig is in dit geval.

Ik heb de hanleiding van SQL al grondig bestudeert. Heb het ook al geprobeert met de SQL functies CURDATE en CURRENT_DATE.
Gewijzigd op 15/04/2004 14:38:00 door Willem Jan
 
PHP hulp

PHP hulp

29/04/2024 11:34:16
 
Elwin - Fratsloos

Elwin - Fratsloos

15/04/2004 18:47:00
Quote Anchor link
Je tweede stukje code:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$datum1
=date("Y.m.d.", mktime(0, 0, 0, date("Y"), date("m")  , date("d") +30   ));
?>

Jah... Dit kan dan ook helemaal niet hè? De eerste keer gebruik je de functie mktime() goed en de andere keer niet...

http://nl3.php.net/mktime zegt:
Quote:
int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])

Dat betekend dat het zo zal moeten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$datum1
=date("Y.m.d.", mktime(0, 0, 0, date("m"), date("d") +30  , date("Y")));
?>


Elwin
 
Mitch X

Mitch X

15/04/2004 18:49:00
Quote Anchor link
Mss is mij het ontgaan, of mss staat het er niet maar waarom moet eerst het jaar?
 
Elwin - Fratsloos

Elwin - Fratsloos

15/04/2004 18:54:00
Quote Anchor link
Quote:
Mss is mij het ontgaan, of mss staat het er niet maar waarom moet eerst het jaar?

Het jaar moet juist als laatste... (in de mktime() functie).

Elwin
 
Mitch X

Mitch X

15/04/2004 19:49:00
Quote Anchor link
Het was eigelijk een reactie op het allereerste bericht :), maar jij was eerder ... (2 minuten? Deed ik er zolang over? :P)
 
Elwin - Fratsloos

Elwin - Fratsloos

15/04/2004 22:21:00
Quote Anchor link
Ow.. :D Maarre... twee minuten over dat.. hoe de hell kan je dan fatsoenlijk programmeren... ;)

Elwin
 
Mitch X

Mitch X

15/04/2004 22:26:00
Quote Anchor link
Ow maar ik doe een hoop tegelijk hoor... ;)
En programmeren gaat me goed af (denk ik)
 

16/04/2004 00:25:00
Quote Anchor link
OK ik dacht dat als ik in de dat functie de volgorde van notatie wijzigde dat in de mktime ook de bedoeling was.

Mijn fout dus..

iig bedankt!
 
Willem Jan

Willem Jan

16/04/2004 00:30:00
Quote Anchor link
Vorige berichtje was ook van mij.

Nog ff een antwoord waarvoor ik die datumnotatie nodig had:
In de MySQL database wordt de datum ook volgens de Y.m.d. notatie opgeslagen. Om te vergelijken heb ik dan toch dezelfde notatie nodig?

Of kan ik het in de database ook volgens de d.m.Y. notatie opslaan?

Das natuurlijk op zich wel gemakkelijker, want ik moet het bij het naar het scherm schrijven toch omzetten naar de nederlandse notatie.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.