met datum rekenen, gaat fout naar volgende maand
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
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?
lol :)
Toevoeging op 03/11/2014 08:31:46:
oh... helaas... dus toch niet... sjee, ik moet leren eerst testen dan pas reageren :)
if($datum > new datetime('yesterday'))
Thnx Ivo!!
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.
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....)
Hij is wel erg handig...
Dus ik duik er ff in
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 -
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....
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.
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?
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
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!