met datum rekenen, gaat fout naar volgende maand

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

E. de Groot

E. de Groot

31/10/2014 14:06:12
Quote Anchor link
Hoi,

Ik heb deze code:

$dat1 = date('j-m-Y', strtotime($_POST['datum_afspraak']));
$dat2 = date('j-m-Y', strtotime($datum));

$dat3 = ($dat1 - $dat2);

if (!empty($_POST['datum_afspraak']) && ($dat3 >= 0)) {
$datum_afspraak = $_POST['datum_afspraak'];
$_SESSION['datum_afspraak'] = $_POST['datum_afspraak'];

Dit zou moeten bepalen of de afspraak na vandaag is gemaakt. Maar als ik de datum voor november kies, dan accepteert hij hem niet. Binnen dezelfde maand gaat het goed maar nu het morgen 1 november is, pakt hij niets.
Ik neem aan dat het hem zit in het aftrekken van elkaar maar dat zou toch niet mis mogen gaan lijkt mij... in de db staat ie gewoon als DATE en wat in het formulier wordt gestuurd is: 01-11-2014
 
PHP hulp

PHP hulp

20/04/2024 05:36:07
 
Ivo P

Ivo P

31/10/2014 16:00:30
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT datum, (datum > CURRENT_DATE) AS intoekomst
FROM tabel
-- WHERE datum > CURRENT_DATE


of in php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$datum
= new datetime($_POST['datum_afspraak']);
if($datum > new datetime() ) {
  echo 'in toekomst';
}

?>
 
E. de Groot

E. de Groot

31/10/2014 16:09:53
Quote Anchor link
dank je Ivo... ik ga beide mogelijkheden ff proberen hoewel ik de DB versie niet kan gebruiken aangezien het niet in de db staat :)

die 2de ziet er goed uit. Dus die ga ik ff testen

Toevoeging op 31/10/2014 16:17:54:

Yes! hij doet het... heb er wel van gemaakt >= want afspraak mag ook vandaag :)
Dank je wel Ivo!!!

Toevoeging op 31/10/2014 17:46:38:

helaas, het werkt toch nog niet.. dit heb ik nu:

$dat1 = new datetime($_POST['datum_afspraak']);
if($dat1 >= new datetime() ) {
$datum_afspraak = $_POST['datum_afspraak'];
$_SESSION['datum_afspraak'] = $_POST['datum_afspraak'];
} else {
$_SESSION['datum_afspraak'] = $_POST['datum_afspraak'];
$error .= "* Geef juiste datum op<BR>";
}
Met de datum van vandaag loopt hij nu mis.

Enig idee?
 
E. de Groot

E. de Groot

03/11/2014 08:29:33
Quote Anchor link
Oh... ik denk dat ik hem al snap... jij had hem direct al goed. > groter dan dus... omdat alleen datum wordt gepost en geen tijd, begint hij de dag op 00:00:00 en dus is alles van vandaag en morgen groter dan...

lol :)

Toevoeging op 03/11/2014 08:31:46:

oh... helaas... dus toch niet... sjee, ik moet leren eerst testen dan pas reageren :)
 
Ivo P

Ivo P

03/11/2014 10:42:59
Quote Anchor link
probeer eens:

if($datum > new datetime('yesterday'))
 
E. de Groot

E. de Groot

03/11/2014 11:22:36
Quote Anchor link
Zo simpel kan het soms zijn...:)
Thnx Ivo!!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/11/2014 12:27:21
Quote Anchor link
Lijkt mij beter om de tijd expliciet op nul te zetten als je alleen de datum wilt vergelijken:

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
<?php
$datum
= new datetime($_POST['datum_afspraak']);
$datum->setTime(0,0);

$vandaag = new datetime();
$vandaag->setTime(0,0);

echo $datum->format('d-m-Y H:i:s');
echo $vandaag->format('d-m-Y H:i:s');

if($datum >= $vandaag ) {
  echo 'in toekomst';
}

?>


Na een testje blijkt dat 'yesterday' inderdaad ook de tijd op nul zet, dus dat kan ook maar je hebt dan wel de datum van een dag eerder te pakken.
 
Ivo P

Ivo P

03/11/2014 15:57:44
Quote Anchor link
en '2014-11-02 10:00' is groter dan '2014-11-02' (yesterday).

Dus mocht je bij de invoer een tijd meekrijgen dan is dat niet handig.

Mogelijk dat new datetime('today') oid een betere was geweest (geen idee of 'today' eigenlijk bestaat....)
 
E. de Groot

E. de Groot

03/11/2014 16:18:04
Quote Anchor link
nou... ik moet idd een en ander met elkaar vergelijken en datetime kende ik nog niet.
Hij is wel erg handig...
Dus ik duik er ff in
 
E. de Groot

E. de Groot

24/11/2014 10:46:37
Quote Anchor link
Er gaat toch weer iets mis...

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
28
29
30
<?php        $oranjevan = date('H:i', strtotime($row_afdtba['tijd_vervolg_1']));
        $oranjetot = date('H:i', strtotime($row_afdtba['tijd_vervolg_2']));
        $oranjedat = date('Y-m-j', strtotime($row_afdtba['datum_vervolg']));
        $oranjedatnu = date('Y-m-j');
        $oranjenu = date('H:i');
        
        $vergelijk_datum_nu = new DateTime('now');
        $vergelijk_datum_1 = new DateTime($oranjevan);
        $vergelijk_datum_2 = new DateTime($oranjetot);
        $vergelijk_datum_next = new DateTime($oranjedat);
        
        
        if ($vergelijk_datum_nu->format('d-m-Y') == $vergelijk_datum_next->format('d-m-Y') && $vergelijk_datum_nu->format('H:i:s') > $vergelijk_datum_1->format('H:i:s') && $vergelijk_datum_nu->format('H:i:s') < $vergelijk_datum_2->format('H:i:s'))
            {
    echo "bgcolor=#DB704D";    // oranje
            }
        if ($vergelijk_datum_nu->format('d-m-Y') >= $vergelijk_datum_next->format('d-m-Y') && $vergelijk_datum_nu->format('H:i:s') > $vergelijk_datum_2->format('H:i:s'))
            {
    echo "bgcolor=#BF1919"; // rood
            }
        if ($vergelijk_datum_nu->format('d-m-Y') == $vergelijk_datum_next->format('d-m-Y') && $vergelijk_datum_nu->format('H:i:s') > $vergelijk_datum_2->format('H:i:s'))
            {
    echo "bgcolor=#BF1919"; // rood
            }
        if ($vergelijk_datum_nu->format('d-m-Y') > $vergelijk_datum_next->format('d-m-Y'))
            {
    echo "bgcolor=#BF1919"; // rood
            }
        if ($vergelijk_datum_nu->format('d-m-Y') < $vergelijk_datum_next->format('d-m-Y'))
            {
   echo "bgcolor=#8DE28D"; // groen
            }
        if ($vergelijk_datum_nu->format('d-m-Y') == $vergelijk_datum_next->format('d-m-Y') && $vergelijk_datum_nu->format('H:i:s') < $vergelijk_datum_1->format('H:i:s'))
            {
   echo "bgcolor=#8DE28D"; // groen
            }?>


Waarom gaat het nu toch weer mis met datum van de volgende maand? 1 dec wordt rood gekleurd. en die zou toch echt groter moeten zijn dan "nu"
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 24/11/2014 11:53:52 door - Ariën -
 
Ivo P

Ivo P

24/11/2014 10:52:30
Quote Anchor link
omdat je de geformateerde datums en niet de datums zelf vergelijkt:


if($datum1 > $datum2)

tegen

if($datum1->format('d-m-Y') > $datum2->format('d-m-Y'))

ofwel
if('31-12-1900' > '1-12-2014')

dan is 3 inderdaad groter dan 1 ookal gaat het om meer dan 100 jaar....
 
E. de Groot

E. de Groot

24/11/2014 11:45:25
Quote Anchor link
hummmm, Hoe zou het dan moeten?
Want wat gestuurd wordt vanuit het formulier is dan natuurlijk geen datum...
 
Ivo P

Ivo P

24/11/2014 12:10:30
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if ($vergelijk_datum_nu->format('d-m-Y') >= $vergelijk_datum_next->format('d-m-Y') && $vergelijk_datum_nu->format('H:i:s') > $vergelijk_datum_2->format('H:i:s'))
            {    echo "bgcolor=#BF1919"; // rood
            }


wordt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if ($vergelijk_datum_nu >= $vergelijk_datum_next
      && $vergelijk_datum_nu > $vergelijk_datum_2)
            {    echo "bgcolor=#BF1919"; // rood
            }


Toevoeging op 24/11/2014 12:14:34:

en dat is dan los van het gejongleer in de eerst 6 regels van je script:

met strtotime() naar een timestamp, vervolgens met date() daar een formaat op gooien en dat weer voeren aan DateTime().

sowieso snapt DateTime met een '@' erbij wat een unix-timestamp is,
maar ook zou new DateTime($row_afdtba['datum_vervolg']) al moeten werken.

--
daarnaast zou ik datum en tijd bij elkaar houden om allerlei dubbele vergelijkingen "is het de datum en is het later dan 11 uur" te kunnen voorkomen.
 
E. de Groot

E. de Groot

24/11/2014 13:25:26
Quote Anchor link
Ik snap echt helemaal niets van die date dingen... ben er al jaren mee aan het stoeien en ik krijg het nooit voor elkaar...

Als ik die format weghaal, dan draait het probleem helemaal om... en dan worden de dagen die in de toekomst liggen helemaal niet meer rood maar blijven wit...
 
Ivo P

Ivo P

24/11/2014 14:02:01
Quote Anchor link
wanneer moet er welke kleur komen?
 
E. de Groot

E. de Groot

24/11/2014 14:14:07
Quote Anchor link
je voert datum en tijd in wanneer de afspraak is.
Op het moment dat je de lijst opent moet hij dus kijken wanneer de tijdsblokken zijn.

Dus nu is het moment dat je kijkt.

groen, indien toekomst
oranje als het tijdsblok nu is
rood als het tijdsblok in het verleden ligt

ingevoerd wordt:
datum: 13-11-2014
tijd: 13:45 - 14:00

waarbij de tijd in 4 pulldown menutjes wordt opgebouwd. Uren en per kwartier
 
Ivo P

Ivo P

24/11/2014 15:30:06
Quote Anchor link
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
<?php
$begin
= $_POST['datum'] .' '. $_POST['tijd1'];
$eind= $_POST['datum'] .' '. $_POST['tijd2'];

$dtBegin =  DateTime::createFromFormat('d-m-Y H:i', $begin);
$dtEind =  DateTime::createFromFormat('d-m-Y H:i', $eind);
$dtNu = new DateTime();

if($dtBegin > $dtNu) {
   // toekomst
}
elseif($dtEind < $dtNu) {
    // verleden
}
else {
   // tussenin
}

?>


aangenomen dat tijd1 < tijd2
 
E. de Groot

E. de Groot

25/11/2014 08:03:52
Quote Anchor link
wtf? zo simpel kan het zijn? :'(
Ik ga het ff testen... if so... two tumbs up!

Toevoeging op 25/11/2014 10:55:06:

WOW!! Thnx Ivo, het werkt!!!
Kheb hem wel een klein beetje moeten aanpassen... dit is het geworden:

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
<?php

            $begin
= $row_afdtba['datum_vervolg'] .' '. $row_afdtba['tijd_vervolg_1'];
            $eind = $row_afdtba['datum_vervolg'] .' '. $row_afdtba['tijd_vervolg_2'];

            $dtBegin =  DateTime::createFromFormat('Y-m-d H:i:s', $begin);
            $dtEind =  DateTime::createFromFormat('Y-m-d H:i:s', $eind);
            $dtNu = new DateTime();

            if($dtBegin > $dtNu) {
            // toekomst
            echo "bgcolor=#8DE28D";
            }

            elseif($dtEind < $dtNu) {
            // verleden
            echo "bgcolor=#BF1919";
            }

            else {
            // tussenin
            echo "bgcolor=#DB704D";
            }


?>


Zoals beloofd... bij deze: Two Tumbs Up!
Bedankt voor het meedenken en zelfs herschrijven van het script!
 



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.