LIVE TRACKING SEARCH WIDGETS DATA SOLUTIONS FLIGHT STATISTICS CLAIM COMPENSATION
05. Dec 2022
Landed The flight has landed. It arrived 20 months ago (27min early) . PTY
Panama City GATE: 137 ->
2h 31m 2,548km / 1,572mi (Direct: 1,894km, +25%)
FLL
Fort Lauderdale TERMINAL: 4 GATE: G11
05 Dec 03:01EST 05 Dec 02:59 08:01 UTC 2min late
05 Dec 05:32 EST 05 Dec 06:00 10:32 UTC 27min early
" : ""} `; if (activeHex in marker) { liveMap.removeLayer(marker[activeHex]); } const m = L.marker(activeMarker.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: activeHex, opacity: lp[7] != '' ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[activeHex] = m; document.getElementById(`mi-${activeHex}`).style.transform = `rotate(${lp[2]}deg)`; activeMarker = null; } activeHex = null; liveTrack = null; liveMarker = null; estTrack = null; document.getElementById('liveMapContainer').style.display = 'none'; document.getElementById('mapSearch').style.display = 'block';} /** * Recalculates the new position of a marker based on the time elapsed and its previous state. * @param {Object} liveMap */async function updateCalc(liveMap) { if (recalcInProg || liveMap.getZoom() < 6) { return; } recalcInProg = true; for (const [key, prevPos] of Object.entries(lastPos)) { if (key in marker && prevPos[3] >= 50 && !prevPos[6]) { const speed = prevPos[3] || 0; const interval = Date.now() - prevPos[4]; const dist = speed * interval / 1000 / 3600 * 1852; if (dist < 20) { continue; } // calculate next position const lat1 = toRad(prevPos[0]); const lon1 = toRad(prevPos[1]); const brng = toRad(prevPos[2]); const lat2 = Math.asin(sin(lat1) * cos(dist / r_earth) + cos(lat1) * sin(dist / r_earth) * cos(brng)); const lon2 = lon1 + Math.atan2(sin(brng) * sin(dist / r_earth) * cos(lat1), cos(dist / r_earth) - sin(lat1) * sin(lat2)); const lat2d = toDeg(lat2); const lon2d = toDeg(lon2); lastPos[key] = [lat2d, lon2d, prevPos[2], prevPos[3], Date.now(), prevPos[5], prevPos[6], prevPos[7]]; marker[key].setLatLng([lat2d, lon2d]); if (liveTrack && activeMarker == key) { const l = liveTrack.getLatLngs(); l.push(L.latLng(lat2d, lon2d, prevPos[5])); try { liveTrack.setLatLngs(l); } catch (e) { /* Catch error silently. */ } if (activeDest) { const tn = L.latLng(lat2d, lon2d); liveMap.removeLayer(estTrack); const arcOptions = { color: "lightgray", noClip: true, vertices: 100 }; estTrack = t.lng < tn.lng ? L.Polyline.Arc(activeDest, tn, arcOptions) : L.Polyline.Arc(tn, activeDest, arcOptions); estTrack.addTo(liveMap); tracks.push(estTrack); } } } } recalcInProg = false;}/** * Fetches data from a specific URL, handles errors and returns the JSON response. * @param {string} url */async function getData(url) { const response = await fetch(url, { headers: { Authorization: auth_token } }); if (!response.ok) { handleFetchErrors(response); return null; } if (sf === "") { document.getElementById("liveUpdErr").style.display = 'none'; document.getElementById("liveUpdNotFound").style.display = 'none'; } return response.json();}/** * Handles errors during fetch call * @param {Object} response */function handleFetchErrors(response) { if (sf !== "") return; const liveUpdErr = document.getElementById("liveUpdErr"); const liveUpdNotFound = document.getElementById("liveUpdNotFound"); const liveMapContainer = document.getElementById("liveMapContainer"); const mapSearch = document.getElementById("mapSearch"); if (response.status !== 404) { refreshsActive = false; liveUpdNotFound.style.display = 'none'; liveUpdErr.style.display = 'block'; liveMapContainer.style.display = 'none'; mapSearch.style.display = 'block'; document.getElementById("liveUpdErrCode").innerText = response.status; } else { liveUpdErr.style.display = 'none'; liveMapContainer.style.display = 'none'; mapSearch.style.display = 'block'; liveUpdNotFound.style.display = 'block'; }}async function updateMap(liveMap, fromZoom, clickHex) { if (documentIsHidden()) return; const bounds = liveMap.getBounds(); const url = constructURL(bounds, liveMap.getZoom(), clickHex); if (updateInProgressOrTooSoon(fromZoom)) return; recalcInProg = true; lastUpdate = Date.now(); updateInProg = true; const ld = await getData(url); if (!ld) { updateInProg = false; return; } processMapData(liveMap, ld, fromZoom, clickHex);}function documentIsHidden() { return typeof document.hidden !== "undefined" && document.hidden;}function constructURL(bounds, zoom, clickHex) { const widthText = screenWidth > 1000 ? "large" : "small"; const hexIncl = clickHex ? `?incl=${clickHex}&` : "?"; return `/en/live/map/${Math.floor(bounds['_northEast'].lat * 1e5)}/${Math.floor(bounds['_southWest'].lat * 1e5)}/` + `${Math.floor(bounds['_southWest'].lng * 1e5)}/${Math.floor(bounds['_northEast'].lng * 1e5)}/${zoom}/${widthText}` + hexIncl + `${Math.floor(Date.now() / 5000)}`;}function updateInProgressOrTooSoon(fromZoom) { if (updateInProg) { return true; } const freq = fromZoom ? minZoomFreq : minRefreshFreq; return Date.now() - lastUpdate < freq;}function processMapData(liveMap, ld, fromZoom, clickHex) { newMarker = {}; arcs = []; curArc = []; arcCol = ""; prevCoord = []; document.getElementById("nr_flights_disp").innerText = ld["f"]; document.getElementById("nr_flights_tot").innerText = ld["t"]; const st = screenWidth / ld["f"] > 5; const redraw = st !== hadTitles; for (const entr in ld["m"]) { const e = ld["m"][entr]; handleMarker(liveMap, e, redraw, st); } hadTitles = st; removeUnusedMarkers(liveMap); updateInProg = false; recalcInProg = false; firstUpd = false; if (clickHex) { marker[clickHex].fire('click'); }}function handleMarker(liveMap, e, redraw, st) { if (e[4] == null || e[5] == null) { return; } const currentPos = L.latLng(e[4], e[5]); if (redraw && e[0] in marker) { liveMap.removeLayer(marker[e[0]]); delete marker[e[0]]; } if (e[0] in marker) { updateExistingMarker(e, currentPos); } else { createNewMarker(liveMap, e, currentPos, st); }}function updateExistingMarker(e, currentPos) { const m = marker[e[0]]; m.setLatLng(currentPos); lastPos[e[0]] = [e[4], e[5], e[2], e[6], Date.now(), e[7], e[8], e[9]]; newMarker[e[0]] = true; document.getElementById("mi-" + e[0]).style.transform = "rotate(" + e[2] + "deg)";}function createNewMarker(liveMap, e, currentPos, st) { var des = TypeDesignatorIcons[e[10]]; if (!des) { des = DefaultIcon; } const htmlc = (st ? "" + e[9] + "
" : "") + " "; const m = L.marker(currentPos, { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: e[0], opacity: e[3] ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[e[0]] = m; markerType[e[0]] = des; newMarker[e[0]] = true; lastPos[e[0]] = [e[4], e[5], e[2], e[6], Date.now(), e[7], e[8], e[9]]; document.getElementById("mi-" + e[0]).style.transform = "rotate(" + e[2] + "deg)";}function removeUnusedMarkers(liveMap) { for (const m in marker) { if (!(m in newMarker) && m != activeHex) { liveMap.removeLayer(marker[m]); delete marker[m]; } }}function onPlaneClick(e) { if (sf != "") { return; } updateInProg = true; const liveMap = e.target._map; const hex = e.target.options.alt; if (hex == activeHex) { return; } updateTrack(liveMap, `/${lang}/live/track_hex/${hex}`, hex, e);}function onMoveend(e) { localStorage.setItem('livemapCenter', JSON.stringify(e.target.getCenter())); localStorage.setItem('livemapZoom', e.target.getZoom()); updateMap(e.sourceTarget, false); } function onZoomed(e) { updateMap(e.sourceTarget, true) }// Define a utility function for creating a markerfunction createMarker(latLng, iconClass, htmlContent, alt, opacity) { return L.marker(latLng, { icon: L.divIcon({ className: iconClass, html: htmlContent }), alt: alt, opacity: opacity, }).on('click', onPlaneClick);}function updateTrack(liveMap, url, hex, e) { let prevCoord = null; let prevCoordFull = null; getData(url).then(function (ld) { if (!ld) { return; } const hadNoHex = hex === ""; if (hex === "" && url.includes("hex")) { hex = ld[0]; } else if (hex === "") { hex = ld[1]; } if (activeMarker && hex !== activeHex) { // Reset old marker const lp = lastPos[activeHex]; const des = markerType[activeHex]; const htmlc = (hadTitles ? "" + lp[7] + "
" : "") + " `; liveMap.removeLayer(marker[activeHex]); const m = L.marker(activeMarker.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: activeHex, opacity: lp[7] != '' ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[activeHex] = m; markerType[activeHex] = des; document.getElementById("mi-" + activeHex).style.transform = "rotate(" + lp[2] + "deg)"; activeMarker = m; } // Set new marker const target = e ? e.target : marker[hex]; if (hex !== activeHex && target) { const lp = lastPos[hex]; const des = markerType[hex]; const htmlc = (hadTitles ? "" + lp[7] + "
" : "") + " `; const m = L.marker(target.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: hex, opacity: ld[3] ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[hex] = m; liveMap.removeLayer(target); activeMarker = m; if (!e) { document.getElementById("mi-" + hex).style.transform = "rotate(" + lp[2] + "deg)"; } } refreshsActive = true; recalcInProg = true; arcs = []; curArc = []; arcCol = ""; prevCoord = []; track = ld[23]; if (sf === "") { if (ld[0] !== "") { domElements.get("liveFlnr").href = `/${lang}/live/flight_details/${ld[10]}`; domElements.get("liveFlnr").innerText = ld[0]; } else { domElements.get("liveFlnr").innerText = ""; domElements.get("liveFlnr").href = ""; } if (ld[21]) { domElements.get("liveAirline").innerText = ld[21]; } else { domElements.get("liveAirline").innerText = ""; } domElements.get("liveHex").innerText = ld[1]; if (ld[2] !== "" && ld[2] !== ld[0]) { domElements.get("liveCallsign").innerText = ld[2]; } else { domElements.get("liveCallsign").innerText = ""; } if (ld[3] !== "") { domElements.get("liveReg").href = `/${lang}/planes/${ld[3]}`; domElements.get("liveRegBlock").style.display = "block"; domElements.get("liveReg").innerText = ld[3]; } else { domElements.get("liveReg").innerText = "NA"; domElements.get("liveRegBlock").style.display = "none"; domElements.get("liveReg").href = ""; } if (ld[4] !== "NA") { if (domElements.get("liveRouteContainer")) { domElements.get("liveRouteContainer").style.display = "block"; } domElements.get("liveDep").innerText = ld[5]; domElements.get("liveDepFlag").src = "/staticfiles/" + ld[6].toLowerCase() + ".svg"; domElements.get("liveDep").href = `/${lang}/airport/${ld[5]}/${ld[4]}`; domElements.get("liveDepTime").innerText = ld[11]; if (ld[19] && ld[19] !== "+0") { domElements.get("liveDepDelay").innerText = ld[19]; } else { domElements.get("liveDepDelay").innerText = ""; } } else { domElements.get("liveDep").innerText = "NA"; domElements.get("liveDepTime").innerText = ""; domElements.get("liveDepDelay").innerText = ""; if (domElements.get("liveRouteContainer")) { domElements.get("liveRouteContainer").style.display = "none"; } } if (ld[7] !== "NA") { if (domElements.get("liveRouteContainer")) { domElements.get("liveRouteContainer").style.display = "block"; } domElements.get("liveArr").innerText = ld[8]; domElements.get("liveArrFlag").src = "/staticfiles/" + ld[9].toLowerCase() + ".svg"; domElements.get("liveArr").href = `/${lang}/airport/${ld[8]}/${ld[7]}`; domElements.get("liveArrTime").innerText = ld[12]; if (ld[20] && ld[20] !== "+0") { domElements.get("liveArrDelay").innerText = ld[20]; } else { domElements.get("liveArrDelay").innerText = ""; } } else { domElements.get("liveArr").innerText = "NA"; domElements.get("liveArrTime").innerText = ""; domElements.get("liveArrDelay").innerText = ""; if (domElements.get("liveRouteContainer")) { domElements.get("liveRouteContainer").style.display = "none"; } } if (ld[10] !== null) { domElements.get("liveLink").href = `/${lang}/live/flight_details/${ld[10]}`; domElements.get("liveLink").style.display = "block"; } else { domElements.get("liveLink").style.display = "none"; } const lt = track[track.length - 1]; domElements.get("liveAlt").innerText = lt[3] + " ft"; domElements.get("liveSpeed").innerText = lt[5] + " kts"; domElements.get("liveTrack").innerText = lt[4] + "°"; if (ld[18] !== "") { domElements.get("planePic").src = ld[18]; domElements.get("planePic").style.display = "block"; } else { domElements.get("planePic").style.display = "none"; } if (ld[22]) { domElements.get("liveType").innerText = ld[22]; domElements.get("liveTypeBlock").style.display = "block"; } else { domElements.get("liveTypeBlock").style.display = "none"; domElements.get("liveType").innerText = "NA"; } } // update upper items if relevant const liveStatusInd = domElements.get("liveStatusInd"); const liveStatusText = domElements.get("liveStatusText"); if (liveStatusInd && true) { if (!domElements.has("liveTrackHB")) { domElements.set("liveAltHB", document.getElementById("liveAltHB")); domElements.set("liveSpeedHB", document.getElementById("liveSpeedHB")); domElements.set("liveTrackHB", document.getElementById("liveTrackHB")); domElements.set("liveDataHB", document.getElementById("liveDataHB")); } liveStatusInd.innerText = ld[17] ? "Live" : "Landed"; const lt = ld[23][ld[23].length - 1]; if (domElements.get("depTimeLiveHB")) { domElements.get("depTimeLiveHB").innerText = ld[11]; domElements.get("arrTimeLiveHB").innerText = ld[12]; domElements.get("depDelHB").innerText = ld[19]; domElements.get("arrDelHB").innerText = ld[20]; domElements.get("liveAltHB").innerText = lt[3]; domElements.get("liveSpeedHB").innerText = lt[5]; domElements.get("liveTrackHB").innerText = lt[4]; } if (!ld[17]) { domElements.get("liveDataHB").style.display = "none"; } } if (liveStatusText && ld[17]) { liveStatusText.innerText = ""; } if (ld[13] !== null && ld[14] !== null && track.length > 0 && Math.abs(ld[13] - track[0][1] / 1e5) > 1 && Math.abs(ld[14] - track[0][2] / 1e5) > 1) { arcs.push([[[ld[13], ld[14]], [track[0][1] / 1e5, track[0][2] / 1e5]], "lightgray", true]); } prevCoord = null; prevCoordFull = null; lp = null; for (const entr in track) { const p = track[entr]; if (p[1] === null || p[2] === null || p.length == 0) { continue; } let col = "green"; if (prevCoord && (Math.abs(prevCoord[0] - p[1] / 1e5) > 1 || Math.abs(prevCoord[1] - p[2] / 1e5) > 1)) { arcs.push([curArc, arcCol, false]); arcCol = ""; arcs.push([[[prevCoord[0], prevCoord[1]], L.latLng(p[1] / 1e5, p[2] / 1e5, p[3])], "lightgray", true]); curArc = [L.latLng(p[1] / 1e5, p[2] / 1e5, p[3])]; } else if (arcCol !== col) { if (curArc.length > 0) { arcs.push([curArc, arcCol, false]); } if (prevCoord) { curArc = [prevCoord]; } else { curArc = []; } arcCol = col; } prevCoordFull = [p[1] / 1e5, p[2] / 1e5, p[4], p[5], Date.now(), p[3], false, ld[0]]; prevCoord = L.latLng(p[1] / 1e5, p[2] / 1e5, p[3]); curArc.push(prevCoord); if (p[4] !== 0) { lastTrack = p[4]; } } if (curArc.length > 0) { arcs.push([curArc, arcCol]); } if (ld[15] !== null && ld[16] !== null && prevCoord && (Math.abs(prevCoord.lat - ld[15]) > 0.1 || Math.abs(prevCoord.lng - ld[16]) > 0.1)) { arcs.push([[prevCoord, [ld[15], ld[16]]], "lightgray", true]); activeDest = L.latLng(ld[15], ld[16]); } for (const idx in tracks) { tracks[idx].remove(); } tracks = []; for (const idx in arcs) { const a = arcs[idx]; if (a[2]) { if (a[0][0][1] > a[0][1][1]) { const temp = a[0][0]; a[0][0] = a[0][1]; a[0][1] = temp; } p = L.Polyline.Arc(a[0][0], a[0][1], { color: a[1], noClip: true, vertices: 100 }); estTrack = p; } else { p = L.hotline(a[0], { palette: { 0: 'lightgray', 0.1: 'green', 0.5: 'yellow', 0.7: 'orange', 1: 'red' }, min: 0, max: 36000, outlineWidth: 0, weight: 4, noClip: true }); liveTrack = p; } p.addTo(liveMap); tracks.push(p); } if (prevCoordFull) { lastPos[hex] = prevCoordFull; } if (prevCoord) { if (e) { const i = e.sourceTarget; i.setLatLng(prevCoord); activeMarker = i; if (lastTrack) { document.getElementById("mi-" + hex).style.transform = "rotate(" + lastTrack + "deg)"; } if (!refreshs && !viewSet) { liveMap.setView(prevCoord, 8); } } else { if (!activeMarker) { var des = TypeDesignatorIcons[ld[22]]; if (!des) { des = DefaultIcon; } activeMarker = L.marker(prevCoord, { icon: L.icon({ iconUrl: svgPathToURI(des.path,des.size,false,true), iconSize: liveMap._zoom > 7 ? sizes[0] : sizes[1] }), rotationAngle: prevCoordFull[2], rotationOrigin: "center center", opacity: 0.8, title: hex }).addTo(liveMap); } else { activeMarker.setLatLng(prevCoord); } } if (e || hadNoHex) { // Only set refresh on first click or for live flight tracks (no hex given then) if (trackRefresh) { window.clearInterval(trackRefresh); } if (ld[17]) { trackRefresh = window.setInterval(function () { if (refreshsActive) { updateTrack(liveMap, url, hex, null); } }, 3000); } } } if (!refreshs && !viewSet) { liveMap.setView(prevCoord, 8); } if (sf === "") { domElements.get("liveMapContainer").style.display = 'block'; if (document.getElementById("mapSearch")) { document.getElementById("mapSearch").style.display = 'none'; } } activeHex = hex; updateInProg = false; recalcInProg = false; });} function buildLiveMap(liveMap,activeHex) { const osmUrl = 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'; const osmAttrib = '© OpenStreetMap'; const osm = new L.TileLayer(osmUrl, { attribution: osmAttrib }); liveMap.attributionControl.setPrefix(''); liveMap.addLayer(osm); updateMap(liveMap, false,activeHex); liveMap.on('zoomend', onZoomed); liveMap.on('moveend', onMoveend); } function buildTrackMap(liveMap, url) { const osmUrl = 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'; const osmAttrib = '© OpenStreetMap'; const osm = new L.TileLayer(osmUrl, { attribution: osmAttrib }); liveMap.attributionControl.setPrefix(''); liveMap.addLayer(osm); updateTrack(liveMap, url, "", null); } loadScript("/js/leaflet.js?20220413" ,function() { // set up the map map = new L.map('map-flight',{sleep:false,minZoom:0, gestureHandling: false}); map.whenReady(() => map.gestureHandling?._handleMouseOver?.()); // create the tile layer with correct attribution map.fitBounds([[9.07139,-80.15278],[26.0725,-79.38361]]); viewSet = true; dep=[9.07139,-79.38361]; arr=[26.0725,-80.15278]; sf = "18034456"; buildTrackMap(map,"/en/live/track/18034456"); L.marker(dep).addTo(map); L.marker(arr).addTo(map); }); Full Screen Map
AIRLINE
NAME Spirit Airlines
IATA / ICAO NK / NKS
COUNTRY United States Airline Information
PLANE
MODEL N675NK Airbus A321
ICAO IDENTIFIER A8EF81
SEAT CONFIGURATION 228 seats8 Eco+ 220 Economy
FIRST FLIGHT May 2017 7 years ago Plane Information
GENERAL ROUTE INFO
FREQUENCY:
2x per week Sun, Thu
FLIGHT TIME 3 hours 13 min
FLIGHTS / WEEK 4 Flights
PUNCTUALITY 0 Flights/week delayed 89% On-Time Performance Delay Statistics
SEATS / WEEK 159 seats/Flight 3,023 seats/week Route Info
CO2 EMISSIONS
Economy 245kg
Business 355kg
RECENT FLIGHTS DATE FLIGHT NUMBER FROM TO DEPARTED ARRIVED 05. Dec 2022 Landed NK914 PTY -> FLL Panama City 2min late Panama City (PTY / MPTO) 05 Dec 02:59EST Fort Lauderdale 27min early Fort Lauderdale (FLL / KFLL) 05 Dec 06:00EST 05 Dec 03:01 2min late 05 Dec 05:32 27min early 02. Dec 2022 Landed NK914 PTY -> FLL Panama City 19min late Panama City (PTY / MPTO) 02 Dec 02:59EST Fort Lauderdale 9min early Fort Lauderdale (FLL / KFLL) 02 Dec 06:00EST 02 Dec 03:18 19min late 02 Dec 05:50 9min early 28. Nov 2022 Landed NK914 PTY -> FLL Panama City 13min late Panama City (PTY / MPTO) 28 Nov 02:59EST Fort Lauderdale 14min early Fort Lauderdale (FLL / KFLL) 28 Nov 06:00EST 28 Nov 03:12 13min late 28 Nov 05:45 14min early 25. Nov 2022 Landed NK914 PTY -> FLL Panama City 33min late Panama City (PTY / MPTO) 25 Nov 02:59EST Fort Lauderdale 22min late Fort Lauderdale (FLL / KFLL) 25 Nov 06:00EST 25 Nov 03:32 33min late 25 Nov 06:22 22min late 21. Nov 2022 Landed NK914 PTY -> FLL Panama City on time Panama City (PTY / MPTO) 21 Nov 02:59EST Fort Lauderdale 10min early Fort Lauderdale (FLL / KFLL) 21 Nov 06:00EST 21 Nov 02:58 on time 21 Nov 05:49 10min early
CLAIM COMPENSATION Flight delays happen, but that doesn’t mean you have to accept them. You may be entitled to as much as €600/$700 in compensation if your flight has been delayed, canceled or overbooked within the last three years.
FLIGHT CALENDAR
2022
December 2 Flights
November 8 Flights
October 9 Flights
September 9 Flights
August 14 Flights
July 13 Flights
June 13 Flights
May 13 Flights
April 13 Flights
March 13 Flights
February 12 Flights
January 13 Flights
2021
December 14 Flights
November 12 Flights
October 16 Flights
September 7 Flights
August 5 Flights
July 4 Flights
June 4 Flights
May 5 Flights
April 8 Flights
March 13 Flights
February 16 Flights
January 20 Flights
2020
December 22 Flights
November 30 Flights
October 17 Flights
March 26 Flights
February 29 Flights
January 31 Flights
2019
December 31 Flights
November 30 Flights
October 31 Flights
September 30 Flights
August 31 Flights
July 33 Flights
June 30 Flights
May 31 Flights
April 30 Flights
March 30 Flights
February 28 Flights
January 31 Flights
2018
December 31 Flights
November 30 Flights
October 31 Flights
September 30 Flights
August 31 Flights
July 30 Flights
June 30 Flights
May 31 Flights
April 28 Flights
March 27 Flights
February 26 Flights
January 28 Flights
2017
December 23 Flights
November 13 Flights
October 18 Flights
September 3 Flights
OTHER FLIGHTS OF THE SAME AIRLINE Date / Status Flight Number Airline Departure Arrival 29. Jul Landed NK141 NKS141 BWI -> LAX Spirit Airlines NK/NKS 29 Jul 21:05EDT 11 hours ago 30 Jul 05:07PDT 24 minutes ago 29. Jul Landed NK1112 NKS1112 DFW -> LAX Spirit Airlines NK/NKS 29 Jul 19:09CDT 12 hours ago 29 Jul 19:52PDT 9 hours ago 29. Jul Landed NK2015 NKS2015 MYR -> BOS Spirit Airlines NK/NKS 29 Jul 21:12EDT 11 hours ago 29 Jul 22:55EDT 9 hours ago 29. Jul Landed NK1113 NKS1113 LAX -> DFW Spirit Airlines NK/NKS 29 Jul 17:02PDT 12 hours ago 29 Jul 21:32CDT 9 hours ago 29. Jul Landed NK3806 NKS3806 PHL -> SJU Spirit Airlines NK/NKS 29 Jul 20:22EDT 12 hours ago 29 Jul 23:41AST 8 hours ago
FREQUENTLY ASKED QUESTIONS
How long is flight NK914? The flight has a distance of 1,894.30 km (1,170.04 mi.) with an average flight time of 3 hours and 1 minutes .
How often does NK914 fly? Flight NK914 is operated multiple times per week. It currently operates on Sunday, Thursday.
How many flights operate between Panama City and Fort Lauderdale? The route from Panama City to Fort Lauderdale is served by 1 airline(s) with 4 flights per week. Its weekly capacity is 3,023.
How often is flight NK914 delayed? On average, 22% of all flights are delayed. The average delay is 19 minutes.
Which airlines fly on this route? This route is flown by: Copa Airlines
If NK914 was delayed or cancelled, can I get compensation? Flight delays happen, but that doesn’t mean you have to accept them. You may be entitled to as much as €600/$700 in compensation if your flight has been delayed, canceled or overbooked within the last three years. -> Check Compensation
FAQs
Your Spirit Airlines flight departs from the Fort Lauderdale-Hollywood International Airport (FLL) . Hop online thanks to airport's free WiFi while you wait to board your flight, or browse its many shops, cafes, bars, and restaurants.
What part of Florida does Spirit fly to? ›
List of Spirit Airlines destinations
Country (State/Province) City Airport United States (Florida) Fort Myers Southwest Florida International Airport Jacksonville Jacksonville International Airport Miami Miami International Airport Orlando Orlando International Airport
109 more rows
Is Fort Lauderdale a spirit hub? ›
Fort Lauderdale/Hollywood international airport serves as a major hub for Allegiant Air, JetBlue and Spirit Airlines . It is also a focus city for Frontier Airlines and Spirit Airlines. It has non-stop flights to more than 120 destinations, includig several international flights.
What terminal is Spirit Arrival Fort Lauderdale? ›
Airlines Operating from FLL
Airline Terminal Concourse Spirit Airlines 4 E, F, and G United Airlines 1 C Western Air 1 C WestJet 1 C
8 more rows Jul 7, 2024
Where to park for Spirit Airlines Fort Lauderdale? ›
For long term parking, travelers can park in the Hibiscus Garage levels 3-7, Palm Garage levels 2-4, or Cypress Garage levels 7-9 . The short term parking rates cost $3 per hour or $36 per day. The garages offering short term parking include the Hibiscus Garage level 2 or Palm Garage level 1.
What is Spirit Airlines main airport? ›
The main hub that Spirit Airlines operates out of is Fort Lauderdale-Hollywood International Airport (FLL) , but it has two other major hubs: Orlando International Airport (MCO) and Detroit Metropolitan Wayne County Airport (DTW).
What planes does Spirit fly on? ›
Views: Spirit operates an all-Airbus Fit Fleet® . We have one of the youngest and most fuel-efficient fleets in the U.S. with more planes on the way.
Where is Spirit Airlines home base? ›
How many gates does Spirit have at FLL? ›
It is also connected to Terminal 4 via a newly built walkway. Terminal 4, known as the Green Terminal, contains Concourse G with 14 gates , and functions as the Spirit operating base.
How old are Spirit Airlines planes? ›
This includes airlines like Spirit and Frontier, which boast average fleet ages of 6 years and 4.7 years, respectively. The airline with the lowest average plane age is the Utah-based budget airline Breeze Airways, with an average plane age of 2.1 years.
Originally the company was founded in 1964 as the Clipper Trucking Company , with the airline service starting in 1980 as Charter One, a Detroit-based charter flight company. In 1992, the company changed its name to Spirit Airlines and commenced its first scheduled flights within the United States.
Can I walk between terminals at FLL? ›
Walking Path - If you have time and want to exercise, try the FLL Fit Walking Path . This 1.3-mile path is located on the upper level and goes between the terminals. Store your carry-ons at Bags To Go.
How early should I get to the airport Spirit? ›
Views: Please be prepared and give yourself plenty of time for your upcoming trip. We recommend arriving at least two hours prior to your scheduled departure for domestic flights and at least three hours prior to a departure for an international flight .
Does Spirit have priority boarding? ›
Enhanced Boarding Experience Priority boarding will be available for Guests who choose the Go Big and Go Comfy options , Free Spirit Gold and Silver members, Free Spirit World Elite Mastercard holders and active-duty U.S. service members, and their spouses and children when traveling with the service member.
What Airlines use terminal 2 at FLL? ›
What airlines serve Terminal 2?
Air Canada. Delta Air Lines. WestJet.
Can you walk from terminal 1 to terminal 2 at Fort Lauderdale airport? ›
Walking Path - If you have time and want to exercise, try the FLL Fit Walking Path . This 1.3-mile path is located on the upper level and goes between the terminals.
What airport does spirit fly to in Miami? ›
Miami International Airport - iflyMIA - Miami International Airport.
How far out does Spirit schedule flights? ›
Spirit Airlines flights are released 330 days in advance . This is equal to 47 weeks or 10/11 months. Yes, some airlines have already released their flight schedule for the early stages of next year and are available to book as of now.
Article information
Author : Mrs. Angelic Larkin
Last Updated : 2024-09-09T13:56:57+07:00
Views : 6199
Rating : 4.7 / 5 (67 voted)
Reviews : 82% of readers found this page helpful
Author information
Name : Mrs. Angelic Larkin
Birthday : 1992-06-28
Address : Apt. 413 8275 Mueller Overpass, South Magnolia, IA 99527-6023
Phone : +6824704719725
Job : District Real-Estate Facilitator
Hobby : Letterboxing, Vacation, Poi, Homebrewing, Mountain biking, Slacklining, Cabaret
Introduction : My name is Mrs. Angelic Larkin, I am a cute, charming, funny, determined, inexpensive, joyous, cheerful person who loves writing and wants to share my knowledge and understanding with you.