Datum is niet kleiner?
25-09-2015 00:00:00
04-10-2015 00:00:00
05-10-2015 00:00:00
08-10-2015 00:00:00
Waarom is de eerste datum niet kleiner dan de volgende 3?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($date_0 < $date_1_2) {
$voorkeur_1 = $_POST['voorkeur1']. " ".$_POST['vkeur1o']." ".$_POST['vkeur1m'];
} else {
$error .= "Let op 1ste voorkeursdatum. Graag 4 dagen na AED aanhouden<BR>";
}
if ($date_0 < $date_2_2) {
$voorkeur_2 = $_POST['voorkeur2']. " ".$_POST['vkeur2o']." ".$_POST['vkeur2m'];
} else {
$error .= "Let op 2de voorkeursdatum. Graag 4 dagen na AED aanhouden<BR>";
}
if ($date_0 < $date_3_2) {
$voorkeur_3 = $_POST['voorkeur3']. " ".$_POST['vkeur3o']." ".$_POST['vkeur3m'];
} else {
$error .= "Let op 3de voorkeursdatum. Graag 4 dagen na AED aanhouden<BR>";
}
$voorkeur_1 = $_POST['voorkeur1']. " ".$_POST['vkeur1o']." ".$_POST['vkeur1m'];
} else {
$error .= "Let op 1ste voorkeursdatum. Graag 4 dagen na AED aanhouden<BR>";
}
if ($date_0 < $date_2_2) {
$voorkeur_2 = $_POST['voorkeur2']. " ".$_POST['vkeur2o']." ".$_POST['vkeur2m'];
} else {
$error .= "Let op 2de voorkeursdatum. Graag 4 dagen na AED aanhouden<BR>";
}
if ($date_0 < $date_3_2) {
$voorkeur_3 = $_POST['voorkeur3']. " ".$_POST['vkeur3o']." ".$_POST['vkeur3m'];
} else {
$error .= "Let op 3de voorkeursdatum. Graag 4 dagen na AED aanhouden<BR>";
}
Gebruik format YYYYMMDDHHmmss
Toevoeging op 02/10/2015 13:57:51:
Sjemig zeg..dat was het.. Thnx!
De bovenstaande datum (25-09-2015 00:00:00) is een string. (EDIT daarbij: alle data uit $_GET, $_POST etc. zijn per definitie strings)
Strings volgen een andere sortering dan getallen.
Als je had gedaan wat SanThe voorstelt (het formaat YYYY-MM-DD gebruiken) dan waren deze twee sorteringen gelijk geweest. Dat formaat is niet voor niets een (ISO?) standaard.
Het beste is altijd om data in zijn "rauwe" variant op te slaan. Formattering in een of andere vorm doe je bij het afdrukken. Er zijn legio functies om een standaard datum formaat om te zetten naar een custom (en voor mensen prettiger leesbaar) formaat.
Maar het is goed dat je hier tegenaan loopt, hopelijk ben je in de toekomst wat voorzichtiger met (of in ieder geval wat meer bewust van) het kiezen van de vorm van de data die je gebruikt.
Gewijzigd op 02/10/2015 14:26:57 door Thomas van den Heuvel
Nou.. het was geen string en het was wel degelijk een datum echter ik heb de opmaak eerder dan de vergelijking aangepast naar NL. Dat is ook het enige wat ik heb aangepast.
Wat was het volgens jou dan wel?
Doe eens een var_dump() zou ik zeggen.
Edgar de Groot op 03/10/2015 16:56:54:
Nou.. het was geen string en het was wel degelijk een datum echter ik heb de opmaak eerder dan de vergelijking aangepast naar NL. Dat is ook het enige wat ik heb aangepast.
En daarmee heb je er dus een string van gemaakt.
De allereerste reactie is van SanThe èn is dè oplossing.
Is hij dan zo slim of... Nou ja, laat ik die zin maar niet afmaken.
Onnodige discussie dit in ieder geval.
Nogmaals SanThe bedankt voor de oplossing.
De rest ook bedankt voor het meedenken.
Thomas, Ozzie en ik geven de oorzaak aan.
Zodat je volgende keer wel weet waar het aan ligt.
Santhe vergelijkt namelijk nog steeds strings met elkaar. Dat kan prima bij formaat YYYYMMDDHHIISS, want dat is gewoon een groot nummer.
Gewijzigd op 03/10/2015 22:21:06 door Eddy E
Als je in strings hetzelfde (sorteer)effect wilt bereiken moet je de string die een hogere prioriteit heeft (een zwaarder gewicht heeft) verder naar links in de string zetten. een jaar "weegt zwaarder" dan een maand (immers, een jaar is een veelvoud van maanden), en een maand "weegt zwaarder" dan een dag, omdat een maand uit meerdere dagen is opgebouwd.
PHP is niet strict in het gebruik van types (en voert ook automatisch typecasts uit), maar om het belang van het type te illusteren moet je de volgende queries maar eens uitvoeren in MySQL of een if-statement bakken in een taal die wel strict met types omgaat:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT '5' > '14';
+------------+
| '5' > '14' |
+------------+
| 1 |
+------------+
1 row in set (0.00 sec)
mysql> SELECT 5 > 14;
+--------+
| 5 > 14 |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
+------------+
| '5' > '14' |
+------------+
| 1 |
+------------+
1 row in set (0.00 sec)
mysql> SELECT 5 > 14;
+--------+
| 5 > 14 |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
Jammer dat je alleen maar in een werkend antwoord geinteresseerd lijkt te zijn, en niet in het waarom. Ik denk ook dat het daarom niet de laatste keer is dat je tegen dit probleem aanloopt. En dat je dan mogelijk weer niet begrijpt (of wilt begrijpen) waarom dit zo is.
Edgar de Groot op 03/10/2015 20:36:26:
Is hij dan zo slim of... Nou ja, laat ik die zin maar niet afmaken.
Die zin zou ik inderdaad niet afmaken ... ik zou zo'n zin überhaupt niet eens plaatsen. We proberen je te helpen. Nog een keer zo'n opmerking en ik denk dat er nog maar weinig mensen bereid zullen zijn om je ergens mee te helpen.