Problème avec les dates palindromes futures
niflo -
Bonjour,
Je fais appel à vous car j'ai un problème mystérieux. J'ai codé un algorithme avec la fonction "getNextPalindromes" pour obtenir les prochaines dates palindromes à partir d'aujourd'hui. Je suis vraiment sûr de ce que j'ai fait.
Voici le code:
PS : Concentrez juste sur les fonctions getNextPalindromes et getNextDay. Les autres fonctions marche bien.
// ---- ETAPE 1 ---- function maxDaysInMonth(day, month) { const monthO = {"01": 31, "02": 28, "03": 31, "04": 30, "05": 31, "06": 30, "07": 31, "08": 31, "09": 30, "10": 31, "11": 30, "12": 31}; for(let [element, key] of Object.entries(monthO)) { if(element === month) { if(!(parseInt(day) > key)) { return true; } } } return false } function isValidDate(date) { let day = date.slice(0,2); let month = date.slice(3,5); let year = parseInt(date.slice(6,10)) if(maxDaysInMonth(day, month)) { if(year > 999 && year < 9999) { return true; } } return false; } // ---- ETAPE 2 ---- // Faire appel de la fonction isValidDate // Separer le jour et les deux derniers chiffres de l'annee dans des variables // Créer condition pour savoir : // - Si le 2nd chiffre du jour correspond au 1er de l'année // - Si le 1er chiffre du jour correspond au 2ème de l'année function isPalindrome(date) { if(isValidDate(date)) { let day1 = date[0]; let day2 = date[1]; let day3 = date[3]; let day4 = date[4]; let yA = date[6]; let yB = date[7]; let y1 = date[date.length - 2]; let y2 = date[date.length - 1]; if(day1 == y2 && day2 == y1 && day4 == yA && day3 == yB) return true; return false; } return false; } // ---- ETAPE 3 ---- function getNextDay(i, date) { date.setDate(i) return date.toLocaleDateString("fr") } let tabPalindrom = []; let index = 0; function getNextPalindromes(x) { if(x == 0) { return (function() { for(let index of tabPalindrom) { console.log(index) } })(); } if(tabPalindrom.length == 0) { while(index >= 0) { let date = new Date(); let newDay = getNextDay(index, date); if(isPalindrome(newDay)) { tabPalindrom.push(newDay) return getNextPalindromes(x-1) } index++ } } while(index >= 0) { const [day, year, month] = tabPalindrom[tabPalindrom.length-1].split("/") let date = new Date(year, month - 1, day); let newDay = getNextDay(index, date); if(isPalindrome(newDay)) { tabPalindrom.push(newDay) return getNextPalindromes(x-1) } index++ } } getNextPalindromes(22);
Et voici ce que ça me retourne :
alfa@MacBook-Pro-de-Alpha ex07 % node ex07.js 03/02/2030 08/02/2080 09/02/2090 19/02/2091 10/12/2101 21/12/2112 31/12/2113 02/12/2120 12/12/2121 22/12/2122 03/12/2130 13/12/2131 23/12/2132 04/12/2140 14/12/2141 24/12/2142 05/12/2150 15/12/2151 25/12/2152 06/12/2160 16/12/2161 26/12/2162
Je ne comprends vraiment pas, je n'ai pas toutes les dates. Si quelqu'un peut m'aider ce sera vraiment le bienvenue.
Je vous remercie à tous.
- Problème avec les dates palindromes futures
- Nombre de jours entre deux dates excel - Guide
- Comment trier des dates par mois sur excel - Guide
- Nombre de nuits entre deux dates ✓ - Forum Excel
- Ajoutez à la liste de contacts ana le goff, inscrite le 27 novembre 2015, dans la catégorie i. puis triez les contacts en les classant : par ordre alphabétique de leur nom de famille (critère principal), puis par date du plus récent au plus ancien (critère secondaire). quel mot apparaît à la verticale dans la colonne "catégorie" entre les lignes 200 et 209 (en-tête compris) ? ✓ - Forum Word
- Cette photo n’a pas été prise cette année. trouvez la date, l'heure et avec quel modèle d'appareil photo elle a été prise. - Forum Réseaux sociaux
2 réponses
Bonsoir, je n'y connais pas grand chose en js, mais ton code est bien trop complexe pour uniquement récupérer les dates ultérieures étant des palindromes.
Une chose déjà est que tu ne gère pas les années bissextiles, ce n'est pas cela qui doit causer le bug de ton script. Pourquoi s'ennuyer à gérer cela, alors qu'en ajoutant des jours à une date, la date gèrera toute seule la mise à jour des mois et années, de ce fait plus besoin non plus de vérifier si ta date est valide.
De là on peut arriver à quelque chose comme (fonctionne avec nodejs dans mon terminal).
function show(obj) { // Ouias fonction de feignasse comme moi ^^ console.log(obj); } function show_date(date, sep='/') { console.log(date.getDate() + sep + (date.getMonth() + 1) + sep + date.getFullYear()) } function date_add_days(date, days=1) { date.setDate(date.getDate() + days); } function get_day(date) { return date.getDate().toString().padStart(2, '0'); } function get_month(date) { return (date.getMonth() + 1).toString().padStart(2, '0'); } function get_reverse_year(date) { return date.getFullYear().toString().split('').reverse().join(''); } function get_date(date, sep='/') { return get_day(date) + sep + get_month(date) + sep + date.getFullYear(); } function is_palindrome_date(date) { return get_day(date) + get_month(date) == get_reverse_year(date); } function get_date_palindromes(n) { const date = new Date(); const tabPalindrom = []; let i = 0; while ( true ) { if ( is_palindrome_date(date) ) { tabPalindrom.push(get_date(date)); i++; if ( i == n ) { break; } } date_add_days(date); } return tabPalindrom; } show(get_date_palindromes(22));
Comme tu peux constater, que de simples fonctions pour se mâcher le boulot, ainsi c'est bien plus facile à lire autant qu'à déboguer en cas de problèmes de résultats incorrects.
Bonne continuation.
salut bh_france
ce que j'ai trouvé
La dernière date palindromique universellle remonte au 2 février 2020 (02/02/2020). Mais c'était la première fois depuis le 11 novembre 1111 (11/11/1111), soit 909 ans plus tôt. Et le prochain palindrome universel aura lieu le 21 décembre 2121 (21/12/2112). Ce sera d'ailleurs le dernier du deuxième millénaire.22 févr. 2022
@+