Laat zien tussen data error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yoeri Achterbergen

Yoeri Achterbergen

28/02/2019 16:16:43
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
<?php
date_default_timezone_set('Europe/Amsterdam');
$datefrom = "27-02-2019";
$dateto = "06-03-2019";

if(date("d-m-Y") >= $datefrom && $dateto > date("d-m-Y") || $datefrom == "" && $dateto == ""){
            echo '<div class="active">Actief</div>';
        }
elseif (date("d-m-Y") < $datefrom){
            echo '<div class="scheduled">Gepland</div>';
        }
else{
            echo '<div class="not-active">Niet actief</div>';
        }

?>


bovenstaande code geeft telkens niet actief weer, de datums geef ik in zoals ik nu de variabelen heb gevuld dd-mm-yyyy

Wie o wie kan mij helpen met dit probleem?
 
PHP hulp

PHP hulp

27/09/2020 14:26:56
 
- Ariën -
Beheerder

- Ariën -

28/02/2019 16:20:38
Quote Anchor link
Ik zou het converteren naar een timestamp met strtotime(). Dan kan kan je er makkelijker mee rekenen en vergelijken.

Nu sta je strings te vergelijken, en dat levert niet het gewenste resultaat op ;-)
Gewijzigd op 28/02/2019 16:21:39 door - Ariën -
 
Yoeri Achterbergen

Yoeri Achterbergen

28/02/2019 16:25:28
Quote Anchor link
Bedoel je zo Ariën?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$datefrom
= strtotime("01-03-2019");
$dateto = strtotime("06-03-2019");

if(strtotime(date("d-m-Y")) >= $datefrom && $dateto > strtotime(date("d-m-Y")) || $datefrom == "" && $dateto == ""){
            echo '<div class="active">Actief</div>';
        }
elseif (strtotime(date("d-m-Y")) < $datefrom){
            echo '<div class="scheduled">Gepland</div>';
        }
else{
            echo '<div class="not-active">Niet actief</div>';
        }

?>
 
- Ariën -
Beheerder

- Ariën -

28/02/2019 16:32:01
Quote Anchor link
Ziet er goed uit, op het eerste gezocht.
Test maar uit ;-) Dan weet je het zeker.
Gewijzigd op 28/02/2019 16:33:01 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

28/02/2019 16:54:28
Quote Anchor link
Om datums als string te kunnen vergelijken moeten deze van het format Y-m-d zijn, niet d-m-Y.

Je vergelijkt namelijk strings, PHP weet niet dat de string '01-03-2019' een datum is.

Het klopt dat in je oorspronkelijke codefragment '27-02-2019' na '06-03-2019' komt omdat 2 (van 27) lexicografisch (textueel) volgt op 0 (van 06).

Als je de formattering Y-m-d gebruikt dan werkt het zoals je zou verwachten omdat '2019-03-06' textueel gerangschikt is na '2019-02-27' immers:
2019 en 2019 zijn equivalent
03 volgt op 02, en daarmee valt de tweede datum na de eerste in de sortering.

Ook loont het misschien moeite om de huidige datum op te slaan in een aparte variabele ($now) en het if-statement in een logische volgorde te zetten qua tijdslijn, dus zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if ($before <= $now && $now < $after) {
    // this is happening now
} else {
    // ...
}
?>

Dat leest allemaal een stuk prettiger.
Gewijzigd op 28/02/2019 17:05:42 door Thomas van den Heuvel
 



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.