La traduction de la date de fin de la comparaison PHP DateTime est :
P粉920835423
2023-07-31 15:48:47
<p>J'essaie de désactiver un bouton en comparant la date/heure du jour à une date d'échéance dans la base de données, mais j'ai un problème. J'ai posé la condition mais cela ne fonctionne pas sur un délai d'un jour, par exemple : 2023-07-31 00:00:00 contre 2023-07-31 00:00:00. <br /><br />Voici le code que j'ai essayé : </p><p><br /></p>
<pre class="brush:php;toolbar:false;">//Variables
// $request_project->start_date (contient la date de début avec le type de données datetime également défini par l'utilisateur)
// $request_project->end_date (contient la date limite avec le type de données datetime également défini par l'utilisateur)
$startDate = new DateTime($request_project->start_date); //
$endDate = new DateTime($request_project->end_date);
$startDateTime = date('Y-m-d') ' 00-00-00';
$endDateTime = date('Y-m-d') ' 23-59-59';
$startDateString = $startDate->format('Y-m-d H:i:s');
$endDateString = $endDate->format('Y-m-d H:i:s');</pre>
<p>Je souhaite donc comparer si la date d'échéance définie par l'utilisateur est inférieure ou égale à la date et l'heure d'aujourd'hui. Si c'est le cas, le bouton sera actif et aura la classe btn-primary, sinon l'attribut désactivé sera ajouté et btn-primary. sera remplacé par btn -secondaire. </p>
<pre class="brush:php;toolbar:false;"><?php if($endDateString <= $endDateTime) {?>
<a href="#" class="btn btn-primary btn-hover w-100 mt-2"
onclick="doSomething()">Postuler maintenant <i class="uil uil-arrow-right"></i></a>
<?php } else { ?>
<a href="#" class="btn btn-secondaire btn-hover w-100 mt-2 désactivé"
onclick="doSomething()">Postuler maintenant <i class="uil uil-arrow-right">
≪/i>≪/a>
<?php } ?>
<a href="#" class="btn btn-soft-warning btn-hover w-100 mt-2
bookmark" id="<?=$request_project->id?>"><i class="uil uil-bookmark">
</i> Ajouter un signet</a></pre>
<p>Au lieu d'exécuter le bloc de code else, il exécute toujours le bloc de code if, même si la date de fin a expiré. </p>
Le dilemme que vous rencontrez semble être lié à la façon dont vous comparez la date de fin à la date-heure actuelle. Le problème réside dans la façon dont vous construisez la variable $endDateTime à l'aide de la fonction date().
Dans votre code, vous utilisez 'Y-m-d' comme format de date(), ce qui signifie qu'il ne contient que l'année, le mois et le jour, sans l'heure. Vous avez ensuite concaténé « 23-59-59 » à la date, ce qui a entraîné un format datetime incorrect.
Pour résoudre ce problème, vous devez modifier la variable $endDateTime pour inclure l'heure complète (heures, minutes et secondes) dans le format correct avant de comparer. Vous pouvez le faire en utilisant la fonction date() au format 'Y-m-d H:i:s', comme ceci :
Maintenant, $endDateTime aura le format correct et votre comparaison devrait fonctionner comme prévu.
Voici le code mis à jour :
Avec cet ajustement, le code devrait désormais désactiver correctement le bouton lorsque la date de fin est postérieure à la date d'aujourd'hui.