8722 sujets

Développement web côté serveur, CMS

Bonjour j'ai un petit problème avec ma fonction php.
j'ai tenté de faire une fonction qui servira à l'ouverture d'un pop-up.
Si la date du serveur est égale ou supérieure à la date du début entré par le client et qu'elle est inférieure ou égale à la date de fin alors il affiche.

$Datestartstring = get_field( 'date_de_debut' )  ;/** date choisi via un acf  qui retourne un string si j'ai bien compris*/
$Datestart = DateTime::createFromFormat('d/m/Y', $Datestartstring);/** je convertie en objet datetime*/
$Dateendstring = get_field( 'date_de_fin' );
$Dateend = DateTime::createFromFormat('d/m/Y', $Dateendstring);
$postdate = date( 'd/m/Y' ); /** je récupère la date du serveur  */
/** et voila la fonction  */
if(
    ($postdate >= $Datestart) && ($postdate <= $Dateend)
){
        echo  "active";
}
else{
    echo " nonactive";
}


J'ai bien entendu essayer sans convertire les dates en datetime objet mais sa ne marché pas si quel'un a une idée de comment faire est de pourquoi sa ne marche pas je suis prenneur.
Merci d'avance et bonne journée
Modifié par snotra (08 Dec 2021 - 12:23)
Modérateur
Bonjour,

As-tu fait un echo sur $Datestartstring et $Dateendstring pour vérifier ce qu'ils contiennent. Et que contiennent-ils ?

Amicalement,
Bonjour;
Oui j'ai fait un écho des deux avants conversions les deux me rendent comme valeur 11/12/2021 et 15/12/2021.
c'est pour ça qu'avant avoir regardé la doc de Acf j'utiliser cette valeur directement dans la fonction.
Modérateur
Bonjour,

Il faudrait mettre aussi $postdate au format DateTime.
EDIT: je voulais dire sous forme d'objet DateTime. Par exemple :

$postdate = new DateTime('now');


Amicalement,
Modifié par parsimonhi (08 Dec 2021 - 15:16)
Bonjour,
j'ai tenté la conversion de $postdate mais il ne me renvoie aucune valeur lors de l'echo ensuite et je suis obliger de faire un getdate au lieu de date sinon la conversion bug.
salut

j'ai l'impression que tu essaye de comparer une date() avec un datetime() ce qui n'est pas pareil.
Modérateur
Bonjour,

snotra a écrit :
j'ai tenté la conversion de $postdate mais il ne me renvoie aucune valeur lors de l'echo ensuite et je suis obliger de faire un getdate au lieu de date sinon la conversion bug.


Pas besoin de convertir $postdate. Il suffit me semble-t-il d'écrire :
$postdate = new DateTime('now');

au lieu de :
$postdate = date( 'd/m/Y' );


Amicalement,
Bonjour,
j'ai tenté avec la solution DateTime mais elle ne fonctionne pas.
Toute les functions php suivante ne s’affiche plus et il m'affiche dans l'inspecteur de code
une table dans un élément font.

<font size="1">
<table class="xdebug-error xe-uncaught-exception"

j'ai pas tous mis le truc fait beaucoup de ligne.
Modérateur
Bonjour,

Je ne sais pas ce qui ne marche pas dns ta page. Par contre, la page ci-dessous, elle, marche :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="description" content="Test">
<title>Test</title>
<style>
</style>
</head>
<body>
<?php
function get_field($f)
{
	if($f=='date_de_debut') return '11/12/2021';
	if($f=='date_de_fin') return '15/12/2021';
	return '00/00/0000';
}
$Datestartstring = get_field('date_de_debut');
$Datestart = DateTime::createFromFormat('d/m/Y', $Datestartstring);
$Dateendstring = get_field('date_de_fin');
$Dateend = DateTime::createFromFormat('d/m/Y', $Dateendstring);
$postdate = new DateTime('now');

if(($postdate >= $Datestart) && ($postdate <= $Dateend))
{
	echo "active";
}
else
{
	echo "nonactive";
}
?>
</body>
</html>

Amicalement,