Datum is niet kleiner?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

E. de Groot

E. de Groot

02/10/2015 13:30:48
Quote Anchor link
Hoi

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
}
 
PHP hulp

PHP hulp

24/12/2024 13:36:17
 
- SanThe -

- SanThe -

02/10/2015 13:47:13
Quote Anchor link
Omdat 25 groter is dan die anderen.
Gebruik format YYYYMMDDHHmmss
 
E. de Groot

E. de Groot

02/10/2015 13:55:14
Quote Anchor link
pffff... wat belachelijk... ok, ik zal dat eens proberen. Dacht dat het bij data niet uit zou maken.

Toevoeging op 02/10/2015 13:57:51:

Sjemig zeg..dat was het.. Thnx!
 
Thomas van den Heuvel

Thomas van den Heuvel

02/10/2015 14:24:42
Quote Anchor link
Simpelweg omdat je iets niet begrijpt maakt het nog niet fout.

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
 
Shamrock Modelbouw

Shamrock Modelbouw

03/10/2015 11:04:16
Quote Anchor link
Als je het omzet naar een time kan het wel met elk formaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?PHP
$datum1
= strtotime('25-09-2015 00:00:00');
$datum2 = strtotime('04-10-2015 00:00:00');


if($datum1 < $datum2)
{

    echo "Datum 1 is kleiner dan datum 2";
}

?>
 
E. de Groot

E. de Groot

03/10/2015 16:56:54
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

03/10/2015 17:17:48
Quote Anchor link
>> Nou.. het was geen string

Wat was het volgens jou dan wel?
 
Thomas van den Heuvel

Thomas van den Heuvel

03/10/2015 19:02:21
Quote Anchor link
Hoe kunnen wij dit weten als je in je (onvolledige) codefragment niet vertelt wat $date_0, $date_1_2, $date_2_2, $date_3_2 voor waarden bevatten, van wat voor type / klasse ze zijn en waar deze vandaan komen?

Doe eens een var_dump() zou ik zeggen.
 
Eddy E

Eddy E

03/10/2015 20:30:32
Quote Anchor link
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.
 
E. de Groot

E. de Groot

03/10/2015 20:36:26
Quote Anchor link
Ik snap de discussie niet.
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.
 
Eddy E

Eddy E

03/10/2015 22:12:46
Quote Anchor link
Santhe geeft de oplossing.
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
 
Thomas van den Heuvel

Thomas van den Heuvel

03/10/2015 22:41:17
Quote Anchor link
Net zoals bij getallen is het "gewicht" van een cijfer in een getal wat verder naar links staat zwaarder dan een cijfer wat verder naar rechts staat.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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)

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.
 
Ozzie PHP

Ozzie PHP

03/10/2015 23:54:40
Quote Anchor link
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.
 



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.