Countdown affiche des NaN : NaN : NaN : NaN

Résolu/Fermé
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 - Modifié le 23 sept. 2021 à 18:01
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 - 23 sept. 2021 à 23:36
Bonjour,
Je viens vers vous pour me corriger une erreur sur mon script.
J’utilise un Countdown php mysql . Quand une Date and Time est enregistré sur ma base de donnée avec un format correct Ex… ( 2021-09-09 11:11:00 ) ça fonction très bien.
En revanche quand la date récupérer et NULL ou bien 0000-00-00 00:00:00 ça m’affiche des NaN : NaN : NaN : NaN
J’aimerai que quand la date enregistrée sur ma base de donnée et NULL ou … ( 0000-00-00 00:00:00 ) ne rien afficher
S'il vous plaît aidez-moi à corriger cette erreur.

<?php
// The date for 'poll_end_date'
$date = ($p->promo);

// Parse the string based on the expected format
$dtime = DateTime::createFromFormat("Y-m-d H:i:s", $date);

// Output the date to match the required format
$timestamp = $dtime->format('F j, Y H:i');



?>


<p class="countdown-timer" id="demo"></p>


// Set the date we're counting down to

var countDownDate = new Date("<?php echo $timestamp; ?>").getTime();
// Update the count down every 1 second
var x = setInterval(function(){

// Get today's date and time
var now = new Date().getTime();



// Find the distance between now and the count down date
var distance = countDownDate - now;

// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);

// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = days + ": " + hours + " : "
+ minutes + ": " + seconds + " ";


// If the count down is over, write some text 
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";

}
}, 1000);



Configuration: Windows / Chrome 94.0.4606.54

10 réponses

jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
23 sept. 2021 à 18:05
Bonjour,

Récupère le contenu de ta variable php dans une variable JS puis regarde ce qu'elle contient avant d'essayer de t'en servir dans le reste du code js... ( autrement dit, découpe la ligne3 de ton js en deux ... puis utilise un IF dans ta fonction )

0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 18:33
je vous remercie pour votre réponse.
je ne suis pas forte en js , j'ai utilisé un if même résultat ça m’affiche des NaN : NaN : NaN : NaN plus 0000-00-00 00:00:00
S'il vous plaît pouvez-vous m'arranger le Code , je vous serais reconnaissante.
<?php if(count($info) > 0){ ?>

<?php echo $date = ($p->promo);

// Parse the string based on the expected format
$dtime = DateTime::createFromFormat("Y-m-d H:i:s", $date);

// Output the date to match the required format
$timestamp = $dtime->format('F j, Y H:i');
?>
<p class="countdown-timer" id="demo"></p>		
<?php }else { ?>

	<em> Rien </em>

	<?php } ?>
0
jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
23 sept. 2021 à 18:50
Rien à voir avec le javascript, là tu as fait un if en PHP...
En gros tu n'as pas tenu compte de ma réponse précédente
0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 19:02
votre réponse est trop vague pour moi .
mon niveau en php & js sont vraiment très modeste Monsieur c'est pour ça que je sollicite de l'aide sur le forums ,
je vous remercie pour votre attention.
0
jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
Modifié le 23 sept. 2021 à 19:48
Coté php :
<?php
$date = $p->promo;
if ( !empty($date) && strtotime($date) != '0000-00-00') {
  // Parse the string based on the expected format
  $dtime = DateTime::createFromFormat("Y-m-d H:i:s", $date);

  // Output the date to match the required format
  $timestamp = $dtime->format('F j, Y H:i');

}else{
  $timestamp = "";
}



Coté JS :


// Set the date we're counting down to
var cdate = "<?php echo $timestamp; ?>";
if(cdate !=""){
  var countDownDate = new Date(cdate).getTime();
  // Update the count down every 1 second
  var x = setInterval(function(){

  // Get today's date and time
  var now = new Date().getTime();

  // Find the distance between now and the count down date
  var distance = countDownDate - now;

  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Output the result in an element with id="demo"
  document.getElementById("demo").innerHTML = days + ": " + hours + " : "
  + minutes + ": " + seconds + " ";


  // If the count down is over, write some text 
  if (distance < 0) {
  clearInterval(x);
  document.getElementById("demo").innerHTML = "EXPIRED";

  }
  }, 1000);
}


Bien sûr il y a d'autres façons de faire.
Vérifier, par exemple que ta variable days ne soit pas NaN en utilisant la fonction https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/isNaN



0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 20:14
je vous remercie pour votre réponse , j'ai toujours pas résolu le problème !!
quand je récupère une date non valide de ma BD ex . ( 0000-00-00 00:00:00 ) ça m'affiche toujours des NaN : NaN : NaN : NaN ce que je veux c'est quand la date est ( 0000-00-00 00:00:00 ) ne rien afficher :(
0
jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
23 sept. 2021 à 20:30
Ah.. c'est un Dat'eTime pas juste une date ..
il te suffit de modifier le IF en PHP pour s'adapter à ce format la ..
0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 20:37
déja testée ça ne marche pas !! quand je récupère une date non valide de m'a base de donné ex . ( 0000-00-00 00:00:00 ) ça m'affiche toujours des NaN : NaN : NaN : NaN mais quand la date est valide ça marche !!!!


$date = $p->promo;
if ( !empty($date) && strtotime($date) != '0000-00-00 00:00:00') {
  // Parse the string based on the expected format
  $dtime = DateTime::createFromFormat("Y-m-d H:i:s", $date);

  // Output the date to match the required format
  $timestamp = $dtime->format('F j, Y H:i');

}else{
  $timestamp = "";
}




 
0
jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
23 sept. 2021 à 20:48
Fais moi un var_dump de ta variable date avant le if et montre-moi ce que ça te donne .

Et dans le javascript fais un console.log de la variable cdate et dis-moi ce que ça donne dans la console de ton navigateur
0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 21:13
étonnant sur Fierefox ça marche très bien je viens de le découvrir on allons ouvrir la console mais sur google chrome ça ne marche pas !!
0
jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
23 sept. 2021 à 21:47
Il faut que tu vide le cache de ton navigateur....
Ton JavaScript n'a pas dû prendre en compte les modifications que tu y as fait
0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 21:57
j'ai vider le cash ça ne fonctionne pas.
En fait, l' attribut datetime-local est plutôt nouveau dans la spécification HTML5 et l'implémentation diffère d'un navigateur à l'autre.
FireFox est plus permissif pour ce scénario particulier et affiche la date correctement. Chrome respecte la spécification et ne reconnaît pas le "mauvais" format de date.
0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 22:57
SOLUTION PROPOSÉE sur un autre forum
La solution est de respecter la spécification w3c et d'utiliser la chaîne littérale « T » entre les parties date et heure. Comme ça

<input type="datetime-local" value="2018-02-25T19:24:23"/> 


il me reste qu'a trouver une méthode pour formater la date
sur le forum il ont proposé le code suivant pour ma part je ne sais pas ou le placer dans mon code
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
        private Date createdAt;
0
jordane45 Messages postés 38181 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 mai 2024 4 670
23 sept. 2021 à 22:59
Comme je ne sais pas d'où sort cet input et que je ne vois pas le lien avec le code que tu as donné je ne saurais pas te répondre
0
lina-24 Messages postés 63 Date d'inscription vendredi 6 novembre 2020 Statut Membre Dernière intervention 25 mars 2023 4
23 sept. 2021 à 23:36
cet input est du coté admin du dashboard du site quand j'introduis un article nouveau je doit remplir mes champs pour les sauvegarder sur ma bd !
le input promo si je le laisse vide, sur ma bd ça me met automatiquement 0000-00-00 00:00:00
sur m'a bd le champs promo et de Type ( datetime ) j'ai du le changer en varchar null por ne plus avoir de 0000-00-00 00:00:00 , mais la le format de ma date a changer sur ma BD il y a « T » entre les parties date et heure quand je sélectionne une date ???? et null si je ne sélectionne pas la date promo.
ma question comment formatter une date de type yyyy-MM-dd'T'HH:mm:ss
je vous remercie pour votre attention :)
0