met datum rekenen, gaat fout naar volgende maand
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
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
Code (php)
1
2
3
2
3
SELECT datum, (datum > CURRENT_DATE) AS intoekomst
FROM tabel
-- WHERE datum > CURRENT_DATE
FROM tabel
-- WHERE datum > CURRENT_DATE
of in php
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?
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?
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 :)
lol :)
Toevoeging op 03/11/2014 08:31:46:
oh... helaas... dus toch niet... sjee, ik moet leren eerst testen dan pas reageren :)
probeer eens:
if($datum > new datetime('yesterday'))
if($datum > new datetime('yesterday'))
Zo simpel kan het soms zijn...:)
Thnx Ivo!!
Thnx Ivo!!
Lijkt mij beter om de tijd expliciet op nul te zetten als je alleen de datum wilt vergelijken:
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.
Code (php)
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.
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....)
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....)
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
Hij is wel erg handig...
Dus ik duik er ff in
Er gaat toch weer iets mis...
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"
Code (php)
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
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
}?>
$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!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 24/11/2014 11:53:52 door - Ariën -
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....
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....
hummmm, Hoe zou het dan moeten?
Want wat gestuurd wordt vanuit het formulier is dan natuurlijk geen datum...
Want wat gestuurd wordt vanuit het formulier is dan natuurlijk geen datum...
Code (php)
1
2
3
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
}
{ echo "bgcolor=#BF1919"; // rood
}
wordt:
Code (php)
1
2
3
4
2
3
4
if ($vergelijk_datum_nu >= $vergelijk_datum_next
&& $vergelijk_datum_nu > $vergelijk_datum_2)
{ echo "bgcolor=#BF1919"; // rood
}
&& $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.
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...
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...
wanneer moet er welke kleur komen?
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
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
}
?>
$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
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:
Zoals beloofd... bij deze: Two Tumbs Up!
Bedankt voor het meedenken en zelfs herschrijven van het script!
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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";
}
?>
$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!




