Calendrier CAN 2025 : Toutes les dates et heures des matchs | OneFootball

Calendrier CAN 2025 : Toutes les dates et heures des matchs | OneFootball

In partnership with

Yahoo sports
Icon: OnzeMondial

OnzeMondial

·26 de setembro de 2025

Calendrier CAN 2025 : Toutes les dates et heures des matchs

Imagem do artigo:Calendrier CAN 2025 : Toutes les dates et heures des matchs

La CAN 2025 au Maroc va faire vibrer les fans de football à travers le monde en décembre 2025 et janvier 2026. Retrouvez notre calendrier complet de la compétition. Onze Mondial vous a préparé des options pour configurer à votre guise le calendrier de la Coupe d'Afrique des Nations.

.can-calendar { max-width: 1200px; margin: 0 auto; font-family: 'Arial', sans-serif; background: #fff; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.1); overflow: hidden; width: 100%; } .calendar-header { background: linear-gradient(135deg, #c41e3a, #228b22); color: white; padding: 20px; text-align: center; } .calendar-header h2 { font-size: 2em; margin-bottom: 10px; } .calendar-header p { opacity: 0.9; font-size: 1.1em; } .calendar-filters { background: #f8f9fa; padding: 15px 20px; border-bottom: 1px solid #e9ecef; display: flex; gap: 15px; flex-wrap: wrap; align-items: center; } .filter-group { display: flex; align-items: center; gap: 8px; } .filter-group label { font-weight: bold; color: #495057; font-size: 0.9em; } .filter-select { padding: 8px 12px; border: 1px solid #ced4da; border-radius: 6px; background: white; cursor: pointer; font-size: 0.9em; } .view-toggle { margin-left: auto; display: flex; gap: 5px; } .view-btn { padding: 8px 16px; border: 1px solid #c41e3a; background: white; color: #c41e3a; cursor: pointer; border-radius: 6px; font-size: 0.9em; transition: all 0.3s ease; } .view-btn.active { background: #c41e3a; color: white; } .calendar-content { padding: 20px; } .match-day { margin-bottom: 25px; border: 1px solid #e9ecef; border-radius: 8px; overflow: hidden; } .day-header { background: #228b22; color: white; padding: 12px 20px; font-weight: bold; font-size: 1.1em; } .matches-list { background: white; } .match-item { display: grid; grid-template-columns: 80px 1fr 200px; align-items: center; padding: 15px 20px; border-bottom: 1px solid #f8f9fa; transition: background-color 0.3s ease; cursor: pointer; gap: 20px; } .match-item:hover { background: #f8f9fa; } .match-item:last-child { border-bottom: none; } .match-time { font-weight: bold; color: #c41e3a; font-size: 1.1em; text-align: center; } .match-teams { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 15px; } .team { display: flex; align-items: center; gap: 8px; font-weight: bold; color: #495057; } .team.team1 { justify-content: flex-end; } .team.team2 { justify-content: flex-start; } .flag { width: 20px; height: 14px; border-radius: 2px; flex-shrink: 0; font-size: 16px; display: inline-flex; align-items: center; justify-content: center; } .vs { color: #6c757d; font-size: 0.9em; font-weight: normal; text-align: center; padding: 0 10px; } .match-info { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; } .group-badge { background: #228b22; color: white; padding: 4px 8px; border-radius: 4px; font-size: 0.8em; font-weight: bold; white-space: nowrap; } .stadium { color: #6c757d; font-size: 0.85em; text-align: right; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .phase-section { margin-bottom: 30px; } .phase-header { background: linear-gradient(135deg, #c41e3a, #228b22); color: white; padding: 15px 20px; font-size: 1.3em; font-weight: bold; border-radius: 8px; margin-bottom: 15px; } .knockout-match { background: #fff; border: 1px solid #e9ecef; border-radius: 8px; padding: 20px; margin-bottom: 15px; text-align: center; } .knockout-info { color: #6c757d; font-size: 1.1em; margin-bottom: 10px; } .final-info { background: linear-gradient(135deg, #ffd700, #ffed4a); color: #333; border: 2px solid #ffd700; } .loading { text-align: center; padding: 40px; color: #6c757d; } .no-matches { text-align: center; padding: 40px; color: #6c757d; font-style: italic; } .countdown { background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 8px; padding: 15px; margin-bottom: 20px; text-align: center; } .countdown-title { color: #c41e3a; font-weight: bold; margin-bottom: 10px; } .countdown-timer { display: flex; justify-content: center; gap: 20px; font-size: 1.2em; font-weight: bold; color: #228b22; } .countdown-unit { display: flex; flex-direction: column; align-items: center; gap: 5px; } .countdown-number { font-size: 1.5em; color: #c41e3a; } .countdown-label { font-size: 0.8em; color: #6c757d; text-transform: uppercase; } /* RESPONSIVE MOBILE */ @media (max-width: 768px) { .calendar-filters { flex-direction: column; align-items: stretch; gap: 10px; } .filter-group { flex-direction: column; align-items: stretch; gap: 5px; } .filter-group label { font-size: 0.9em; } .filter-select { width: 100%; } .view-toggle { margin-left: 0; justify-content: center; margin-top: 10px; } .view-btn { flex: 1; text-align: center; } .calendar-header h2 { font-size: 1.5em; } .calendar-header p { font-size: 1em; } .countdown { margin: 10px; } .countdown-timer { gap: 15px; font-size: 1em; } .countdown-number { font-size: 1.3em; } .countdown-label { font-size: 0.7em; } .match-item { grid-template-columns: 1fr; grid-template-rows: auto auto auto; gap: 12px; text-align: center; padding: 15px 10px; border-radius: 8px; margin-bottom: 5px; } .match-time { background: #c41e3a; color: white; padding: 8px 12px; border-radius: 6px; font-size: 0.9em; justify-self: center; min-width: 120px; } .match-teams { grid-template-columns: 1fr; grid-template-rows: 1fr auto 1fr; gap: 8px; padding: 10px; background: #f8f9fa; border-radius: 6px; } .team { justify-content: center !important; padding: 8px; background: white; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); font-size: 0.9em; } .team.team1 { order: 1; } .vs { order: 2; font-weight: bold; color: #c41e3a; background: white; padding: 4px 8px; border-radius: 4px; justify-self: center; width: fit-content; } .team.team2 { order: 3; } .match-info { align-items: center; text-align: center; gap: 8px; } .group-badge { align-self: center; } .stadium { text-align: center; max-width: none; white-space: normal; font-size: 0.8em; line-height: 1.3; padding: 4px 8px; background: #e9ecef; border-radius: 4px; } .day-header { padding: 10px 15px; font-size: 1em; text-align: center; } .phase-header { padding: 12px 15px; font-size: 1.1em; text-align: center; } .knockout-match { padding: 15px; margin-bottom: 10px; } .knockout-info { font-size: 1em; } .flag { font-size: 18px; } /* Amélioration sur très petits écrans */ @media (max-width: 480px) { .calendar-header { padding: 15px 10px; } .calendar-filters { padding: 10px; } .calendar-content { padding: 10px; } .match-item { padding: 12px 8px; } .calendar-header h2 { font-size: 1.3em; } .countdown-timer { gap: 10px; flex-wrap: wrap; justify-content: center; } .countdown-unit { min-width: 60px; } } }


Vídeos OneFootball


🏆 Calendrier CAN 2025 Maroc

Du 21 décembre 2025 au 18 janvier 2026

⏰ Début de la compétition dans :

-- Jours

-- Heures

-- Minutes

Groupe : Tous les groupes Groupe A Groupe B Groupe C Groupe D Groupe E Groupe F

Équipe : Toutes les équipes

Stade : Tous les stades

Chronologique Par phase

Chargement du calendrier...

const canData = { "competition": { "name": "Coupe d'Afrique des Nations 2025", "host_country": "Maroc", "start_date": "2025-12-21", "end_date": "2026-01-18" }, "phases": [ { "phase_name": "Phase de groupes", "matches": [ {"date": "2025-12-21", "time": "20:00", "team1": "Maroc", "team2": "Comores", "group": "A", "stadium": "Complexe sportif Prince Moulay Abdellah, Rabat"}, {"date": "2025-12-22", "time": "15:30", "team1": "Mali", "team2": "Zambie", "group": "A", "stadium": "Stade Mohammed V, Casablanca"}, {"date": "2025-12-22", "time": "18:00", "team1": "Égypte", "team2": "Zimbabwe", "group": "B", "stadium": "Grand Stade d'Agadir, Agadir"}, {"date": "2025-12-22", "time": "20:30", "team1": "Afrique du Sud", "team2": "Angola", "group": "B", "stadium": "Grand Stade de Marrakech, Marrakech"}, {"date": "2025-12-23", "time": "13:00", "team1": "Nigeria", "team2": "Tanzanie", "group": "C", "stadium": "Complexe Sportif de Fès, Fès"}, {"date": "2025-12-23", "time": "15:30", "team1": "Tunisie", "team2": "Ouganda", "group": "C", "stadium": "Stade Annexe Olympique, Rabat"}, {"date": "2025-12-23", "time": "18:00", "team1": "Sénégal", "team2": "Botswana", "group": "D", "stadium": "Grand Stade de Tanger, Tanger"}, {"date": "2025-12-23", "time": "20:30", "team1": "RD Congo", "team2": "Bénin", "group": "D", "stadium": "Stade El Barid, Rabat"}, {"date": "2025-12-24", "time": "13:00", "team1": "Algérie", "team2": "Soudan", "group": "E", "stadium": "Stade Prince Moulay El Hassan, Rabat"}, {"date": "2025-12-24", "time": "15:30", "team1": "Burkina Faso", "team2": "Guinée équatoriale", "group": "E", "stadium": "Stade Mohammed V, Casablanca"}, {"date": "2025-12-24", "time": "18:00", "team1": "Côte d'Ivoire", "team2": "Mozambique", "group": "F", "stadium": "Grand Stade de Marrakech, Marrakech"}, {"date": "2025-12-24", "time": "20:30", "team1": "Cameroun", "team2": "Gabon", "group": "F", "stadium": "Grand Stade d'Agadir, Agadir"}, {"date": "2025-12-26", "time": "16:00", "team1": "Maroc", "team2": "Mali", "group": "A", "stadium": "Complexe Sportif Prince Moulay Abdellah, Rabat"}, {"date": "2025-12-26", "time": "18:30", "team1": "Zambie", "team2": "Comores", "group": "A", "stadium": "Stade Mohammed V, Casablanca"}, {"date": "2025-12-26", "time": "21:00", "team1": "Égypte", "team2": "Afrique du Sud", "group": "B", "stadium": "Grand Stade d'Agadir, Agadir"}, {"date": "2025-12-26", "time": "23:30", "team1": "Angola", "team2": "Zimbabwe", "group": "B", "stadium": "Grand Stade de Marrakech, Marrakech"}, {"date": "2025-12-27", "time": "16:00", "team1": "Nigeria", "team2": "Tunisie", "group": "C", "stadium": "Complexe Sportif de Fès, Fès"}, {"date": "2025-12-27", "time": "18:30", "team1": "Ouganda", "team2": "Tanzanie", "group": "C", "stadium": "Stade El Barid, Rabat"}, {"date": "2025-12-27", "time": "21:00", "team1": "RD Congo", "team2": "Sénégal", "group": "D", "stadium": "Grand Stade de Tanger, Tanger"}, {"date": "2025-12-27", "time": "23:30", "team1": "Bénin", "team2": "Botswana", "group": "D", "stadium": "Stade Annexe Olympique, Rabat"}, {"date": "2025-12-28", "time": "16:00", "team1": "Algérie", "team2": "Burkina Faso", "group": "E", "stadium": "Stade Prince Moulay El Hassan, Rabat"}, {"date": "2025-12-28", "time": "18:30", "team1": "Guinée équatoriale", "team2": "Soudan", "group": "E", "stadium": "Stade Mohammed V, Casablanca"}, {"date": "2025-12-28", "time": "21:00", "team1": "Cameroun", "team2": "Côte d'Ivoire", "group": "F", "stadium": "Grand Stade de Marrakech, Marrakech"}, {"date": "2025-12-28", "time": "23:30", "team1": "Gabon", "team2": "Mozambique", "group": "F", "stadium": "Grand Stade d'Agadir, Agadir"}, {"date": "2025-12-29", "time": "21:30", "team1": "Maroc", "team2": "Zambie", "group": "A", "stadium": "Complexe Sportif Prince Moulay Abdellah, Rabat"}, {"date": "2025-12-29", "time": "21:30", "team1": "Comores", "team2": "Mali", "group": "A", "stadium": "Stade Mohammed V, Casablanca"}, {"date": "2025-12-29", "time": "23:30", "team1": "Égypte", "team2": "Angola", "group": "B", "stadium": "Grand Stade d'Agadir, Agadir"}, {"date": "2025-12-29", "time": "23:30", "team1": "Zimbabwe", "team2": "Afrique du Sud", "group": "B", "stadium": "Grand Stade de Marrakech, Marrakech"}, {"date": "2025-12-30", "time": "21:00", "team1": "Nigeria", "team2": "Ouganda", "group": "C", "stadium": "Complexe Sportif de Fès, Fès"}, {"date": "2025-12-30", "time": "21:00", "team1": "Tanzanie", "team2": "Tunisie", "group": "C", "stadium": "Stade Annexe Olympique, Rabat"}, {"date": "2025-12-30", "time": "23:30", "team1": "Botswana", "team2": "RD Congo", "group": "D", "stadium": "Stade El Barid, Rabat"}, {"date": "2025-12-30", "time": "23:30", "team1": "Bénin", "team2": "Sénégal", "group": "D", "stadium": "Grand Stade de Tanger, Tanger"}, {"date": "2025-12-31", "time": "21:00", "team1": "Guinée équatoriale", "team2": "Algérie", "group": "E", "stadium": "Stade Prince Moulay El Hassan, Rabat"}, {"date": "2025-12-31", "time": "21:00", "team1": "Burkina Faso", "team2": "Soudan", "group": "E", "stadium": "Stade Mohammed V, Casablanca"}, {"date": "2025-12-31", "time": "23:30", "team1": "Cameroun", "team2": "Mozambique", "group": "F", "stadium": "Grand Stade d'Agadir, Agadir"}, {"date": "2025-12-31", "time": "23:30", "team1": "Côte d'Ivoire", "team2": "Gabon", "group": "F", "stadium": "Grand Stade de Marrakech, Marrakech"} ] }, { "phase_name": "Huitièmes de finale", "dates": "du 3 au 6 janvier 2026" }, { "phase_name": "Quarts de finale", "dates": "9 et 10 janvier 2026" }, { "phase_name": "Demi-finales", "date": "2026-01-14" }, { "phase_name": "Match pour la 3e place", "date": "2026-01-17" }, { "phase_name": "Finale", "date": "2026-01-18", "stadium": "Stade Prince Moulay Abdellah, Rabat" } ] }; const flagMap = { 'Maroc': '🇲🇦', 'Comores': '🇰🇲', 'Mali': '🇲🇱', 'Zambie': '🇿🇲', 'Égypte': '🇪🇬', 'Zimbabwe': '🇿🇼', 'Afrique du Sud': '🇿🇦', 'Angola': '🇦🇴', 'Nigeria': '🇳🇬', 'Tanzanie': '🇹🇿', 'Tunisie': '🇹🇳', 'Ouganda': '🇺🇬', 'Sénégal': '🇸🇳', 'Botswana': '🇧🇼', 'RD Congo': '🇨🇩', 'Bénin': '🇧🇯', 'Algérie': '🇩🇿', 'Soudan': '🇸🇩', 'Burkina Faso': '🇧🇫', 'Guinée équatoriale': '🇬🇶', 'Côte d\'Ivoire': '🇨🇮', 'Mozambique': '🇲🇿', 'Cameroun': '🇨🇲', 'Gabon': '🇬🇦' }; function getCountryFlag(country) { return flagMap[country] || '🏴'; } class CANCalendar { constructor() { this.currentView = 'chronologique'; this.filters = { group: 'all', team: 'all', stadium: 'all' }; this.init(); } init() { this.setupEventListeners(); this.populateFilters(); this.renderCalendar(); this.startCountdown(); } setupEventListeners() { document.getElementById('groupFilter').addEventListener('change', (e) => { this.filters.group = e.target.value; this.renderCalendar(); }); document.getElementById('teamFilter').addEventListener('change', (e) => { this.filters.team = e.target.value; this.renderCalendar(); }); document.getElementById('stadiumFilter').addEventListener('change', (e) => { this.filters.stadium = e.target.value; this.renderCalendar(); }); document.querySelectorAll('.view-btn').forEach(btn => { btn.addEventListener('click', (e) => { document.querySelectorAll('.view-btn').forEach(b => b.classList.remove('active')); e.target.classList.add('active'); this.currentView = e.target.dataset.view; this.renderCalendar(); }); }); } populateFilters() { const teams = new Set(); canData.phases[0].matches.forEach(match => { teams.add(match.team1); teams.add(match.team2); }); const teamSelect = document.getElementById('teamFilter'); Array.from(teams).sort().forEach(team => { const option = document.createElement('option'); option.value = team; option.textContent = team; teamSelect.appendChild(option); }); const stadiums = new Set(); canData.phases[0].matches.forEach(match => { stadiums.add(match.stadium); }); const stadiumSelect = document.getElementById('stadiumFilter'); Array.from(stadiums).sort().forEach(stadium => { const option = document.createElement('option'); option.value = stadium; option.textContent = stadium; stadiumSelect.appendChild(option); }); } filterMatches(matches) { return matches.filter(match => { if (this.filters.group !== 'all' && match.group !== this.filters.group) return false; if (this.filters.team !== 'all' && !match.team1.includes(this.filters.team) && !match.team2.includes(this.filters.team)) return false; if (this.filters.stadium !== 'all' && !match.stadium.includes(this.filters.stadium)) return false; return true; }); } formatDate(dateStr) { const date = new Date(dateStr + 'T12:00:00'); return date.toLocaleDateString('fr-FR', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); } renderChronologicalView() { const matches = canData.phases[0].matches; const filteredMatches = this.filterMatches(matches); if (filteredMatches.length === 0) { return '

Aucun match ne correspond aux filtres sélectionnés.

'; } const matchesByDate = {}; filteredMatches.forEach(match => { if (!matchesByDate[match.date]) { matchesByDate[match.date] = []; } matchesByDate[match.date].push(match); }); let html = ''; Object.keys(matchesByDate).sort().forEach(date => { html += `

📅 ${this.formatDate(date)}

`; matchesByDate[date].sort((a, b) => a.time.localeCompare(b.time)).forEach(match => { html += `

${match.time}

${getCountryFlag(match.team1)} ${match.team1}

vs

${match.team2} ${getCountryFlag(match.team2)}

Groupe ${match.group}

📍 ${match.stadium}

`; }); html += `

`; }); return html; } renderPhaseView() { let html = ''; const matches = canData.phases[0].matches; const filteredMatches = this.filterMatches(matches); if (filteredMatches.length > 0) { html += `

⚽ Phase de groupes

`; const matchesByGroup = {}; filteredMatches.forEach(match => { if (!matchesByGroup[match.group]) { matchesByGroup[match.group] = []; } matchesByGroup[match.group].push(match); }); Object.keys(matchesByGroup).sort().forEach(group => { html += `

🏆 Groupe ${group}

`; matchesByGroup[group].sort((a, b) => a.date.localeCompare(b.date) || a.time.localeCompare(b.time)).forEach(match => { html += `

${this.formatDate(match.date)} - ${match.time}

${getCountryFlag(match.team1)} ${match.team1}

vs

${match.team2} ${getCountryFlag(match.team2)}

📍 ${match.stadium}

`; }); html += `

`; }); html += '

'; } canData.phases.slice(1).forEach(phase => { html += `

🏆 ${phase.phase_name}

${phase.date ? `📅 ${this.formatDate(phase.date)}` : `📅 ${phase.dates}` }

${phase.stadium ? `

📍 ${phase.stadium}

` : ''}

`; }); return html || '

Aucun match ne correspond aux filtres sélectionnés.

'; } renderCalendar() { const content = document.getElementById('calendarContent'); let html = ''; if (this.currentView === 'chronologique') { html = this.renderChronologicalView(); } else { html = this.renderPhaseView(); } content.innerHTML = html; } startCountdown() { const startDate = new Date('2025-12-21T20:00:00'); const updateCountdown = () => { const now = new Date(); const diff = startDate - now; if (diff > 0) { const days = Math.floor(diff / (1000 * 60 * 60 * 24)); const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); document.getElementById('days').textContent = days; document.getElementById('hours').textContent = hours.toString().padStart(2, '0'); document.getElementById('minutes').textContent = minutes.toString().padStart(2, '0'); } else { document.getElementById('countdown').style.display = 'none'; } }; updateCountdown(); setInterval(updateCountdown, 60000); } } document.addEventListener('DOMContentLoaded', () => { new CANCalendar(); }); window.initCANCalendar = function(containerId) { const container = document.getElementById(containerId); if (container) { container.innerHTML = document.getElementById('canCalendar').innerHTML; new CANCalendar(); } };

Retrouvez l'actualité du monde du football en France et dans le monde sur notre site avec nos reporters au coeur des clubs.

Saiba mais sobre o veículo