CINXE.COM
CP - Comboios de Portugal
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="author" content="Comboios de Portugal"> <meta name="theme-color" content="#74B751"> <!--[if lt IE 9]> <script type="text/javascript"> window.location = "/passageiros/en/pages/unsupported-browser"; </script> <![endif]--> <title> CP - Comboios de Portugal</title> <meta name="title" content=" CP - Comboios de Portugal"/> <meta name="description" content=" At CP - Comboios de Portugal, you can check train times and discounts and buy tickets online. Further details."/> <meta property="og:url" content="https://www.cp.pt/passageiros/pt/" /> <meta property="og:site_name" content="CP.PT | Comboios de Portugal" /> <meta property="og:title" content=" CP - Comboios de Portugal"/> <meta property="og:description" content=" At CP - Comboios de Portugal, you can check train times and discounts and buy tickets online. Further details."/> <meta property="og:image" content="https://www.cp.pt/StaticFiles/facebook/imagem-hp.jpg" /> <link rel="canonical" href="https://www.cp.pt/passageiros/en/" /> <link rel="icon" sizes="192x192" href="/StaticFiles/CP/resources/images/logo_cp/cp_192.png"> <link rel="icon" sizes="128x128" href="/StaticFiles/CP/resources/images/logo_cp/cp_128.png"> <link rel="apple-touch-icon" href="/StaticFiles/CP/resources/images/logo_cp/cp_76.png"> <link rel="apple-touch-icon" sizes="76x76" href="/StaticFiles/CP/resources/images/logo_cp/cp_76.png"> <link rel="apple-touch-icon" sizes="120x120" href="/StaticFiles/CP/resources/images/logo_cp/cp_120.png"> <link rel="apple-touch-icon" sizes="152x152" href="/StaticFiles/CP/resources/images/logo_cp/cp_152.png"> <link href="/StaticFiles/CP/resources/css/bootstrap.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/css/default-date.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/css/classic.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/css/prettyPhoto.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/css/dataTables.bootstrap.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/css/owl.carousel.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/css/bootstrap-select.css" rel="stylesheet" type="text/css" /> <link href="/StaticFiles/CP/resources/base.css" rel="stylesheet" type="text/css" /> <script src="/StaticFiles/CP/resources/js/jquery-2.1.1.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/bootstrap.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/bootstrap-select.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/base.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/jquery.mobile.custom.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/owl.carousel.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/picker.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/picker.date.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/bootstrap3-typeahead.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/bloodhound.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/jquery.placeholder.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/jquery.prettyPhoto.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/bootstrap-filestyle.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/jquery.mixitup.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/jquery.cookie.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/jquery.dataTables.min.js" type="text/javascript"></script> <script src="/StaticFiles/CP/resources/js/dataTables.bootstrap.js" type="text/javascript"></script> <script type="text/javascript">var switchTo5x=true;</script> <script type="text/javascript" src="//ws.sharethis.com/button/buttons.js"></script> <script type="text/javascript">typeof stLight !== 'undefined' && stLight.options({publisher: "860fee9b-4f32-4132-ab8e-dac1a0c0395b", doNotHash: false, doNotCopy: false, hashAddressBar: false});</script> <!-- Global Site Tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-42733656-3"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag("consent", "default", { ad_storage: "denied", analytics_storage: "denied", functionality_storage: "denied", personalization_storage: "denied", security_storage: "granted", wait_for_update: 500, }); gtag('config', 'UA-42733656-3'); </script></head> <body ng-app="passengersModule"> <div class="wrapper"> <!-- Start of pre-header --> <div> <div class="header"> <!-- Begin apps alert --> <div> <style> <!-- .apps { position: relative; background: #efefef; z-index: 99999; width: 100%; display: none; } .apps p { font-size: 12px; line-height: 14px; padding-bottom: 4px; } .apps .btn { border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; margin: 0px 0px; font-size:14px; padding: 6px 10px; margin-bottom:10px; } .apps .btn-green { background: #74B751; color: #ffffff; } .apps .btn-green:hover { background: #55ac51; color: #ffffff; } .apps .btn-cancel { background-color: #dadada; color: whitesmoke; border: 1px solid #dadada; } .apps p.app-icon { width: 80px; float: left; } .apps p.app-description { position: relative; } .apps p.app-description span.app-owner { font-size: 22px; } .apps div.apps-buttons { text-align: center; } --> </style> <script type="text/javascript"> apps = {}; apps.disable = function() { $(".apps").slideUp(); $.cookie('appsOK', 'appsOK', { expires: 365, path: '/' }); }; apps.mobile = function() { if(window.matchMedia("screen and (orientation:landscape)").matches) { return !window.matchMedia("(min-height: 480px)").matches; } else { return !window.matchMedia("(min-width: 480px)").matches } return false; }; apps.visible = false; apps.animating = false; apps.enabled = function() { return (apps.mobile()) && (typeof $.cookie('appsOK') === "undefined"); }; apps.show = function() { if(!apps.visible) { apps.startShowing(); } }; apps.startShowing = function() { apps.visible = true; $(".apps").stop(true); apps.animating = true; $(".apps").slideDown(500, function() { apps.animating = false; }); }; apps.hide = function() { if(apps.visible) { apps.startHiding(); } }; apps.startHiding = function() { apps.visible = false; $(".apps").stop(true); apps.animating = true; $(".apps").slideUp(500, function() { apps.animating = false; }); }; apps.update = function() { if (apps.enabled()) { apps.show(); } else { apps.hide(); } }; $( document ).ready(function() { apps.update(); $(window).resize(function() { apps.update(); }); }); </script> <div class="apps"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="alert fade in" role="alert"> <button type="button" class="close" data-dismiss="alert"> <span aria-hidden="true"> x </span> <span class="sr-only"> Close </span> </button> <p class="app-icon"> <img src="/StaticFiles/CP/resources/images/app.png"/> </p> <p class="app-description"> <span class="app-owner">App</span><br/> </p> <div class="apps-buttons"> <a class="btn btn-sm btn-cancel" href="javascript:void(0)" onclick="javascript:apps.disable();"> Close </a> <a class="btn btn-sm btn-green" href="/passageiros/pt/apps"> Get </a> </div> </div> </div> </div> </div> </div> </div> <!-- End apps alert --> <!-- Begin cookies alert --> <div> <div class="cookies"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="alert fade in" role="alert"> <div class="col-md-12"> This website uses cookies to improve your digital experience. By "Accept all cookies" you are consenting to necessary category cookies, in accordance with our <a href="/institucional/pt/politica-de-privacidade">Privacy Policy</a>. </div> <div class="clear"></div> <div class="call-to-action pull-right"> <a class="btn btn-primary btn-green-action pull-left" href="javascript:void(0)" onclick="javascript:disableCookieBar();"> Accept all cookies </a> </div> <div class="clear"></div> </div> </div> </div> </div> </div> <script> function disableCookieBar() { $(".cookies").fadeOut(); $.cookie('cookiesOK', 'cookiesOK', { path: '/' }); gtag("consent", "update", { ad_storage: "granted", analytics_storage: "granted", functionality_storage: "granted", personalization_storage: "granted", security_storage: "granted", wait_for_update: 500, }); } if ($.cookie('cookiesOK') != undefined){ $(".cookies").hide(); } </script></div> <!-- End cookies alert --> <div class="navbar navbar-default nav-main-options" role="navigation"> <div class="container"> <a href="#" class="open-menu"><img src="/StaticFiles/CP/resources/images/burguer.png"></a> <a href="/passageiros/en"><img src="/StaticFiles/CP/resources/images/logo-cp-white-graph.png" class="cp-responsive pull-left"></a> <div class="user-log-mobile"> <ul class="pull-right"> <li><a href="/passageiros/en/mycp/login">myCP</a></li> </ul> </div> <div class="navbar-header"> <div> <ul class="pages pull-left"> <li class="active"><a href="/passageiros/en/">Passengers</a></li> <li ><a href="/institucional/en/">Institutional</a></li> <li><a href="/passageiros/en/how-to-travel/kids">Kids</a></li> </ul> <a class="link-acessibilidade" title="Acessibilidade" href="/passageiros/en/how-to-travel/Special-needs-customers" accesskey="0"> <img alt="P谩gina de Acessibilidade" src="/StaticFiles/CP/resources/images/accessibility.png"> </a></div> </div> <nav class="navbar-collapse bs-navbar-collapse collapse " role="navigation"> <div class="nav navbar-nav navbar-right"> <div> <script src="/StaticFiles/CP/resources/js/angular.min.js"></script> <script src="/StaticFiles/CP/resources/js/showErrors.min.js"></script> <ul class="user-nav" style="margin-left: 0px;"> <li class="separator" ng-show="true" ng-cloak><a href="/passageiros/en/mycp/login">myCP <span class="glyphicon glyphicon-lock"></span></a></li> <li><a href="/passageiros/en/mycp/area-pessoal/your-tickets"> Your tickets </a></li> <li class="separator"><a href="/passageiros/pt/">PT</a></li> <li><a class="active" href="/passageiros/en/">EN</a></li> </ul> <p ng-show="false" class="user-account pull-right" ng-cloak> <a href="/passageiros/en/mycp/area-pessoal"> </a> </p> <p ng-show="false" class="user-account pull-right" ng-cloak> <a href="/sites/j_spring_security_logout">Logout </a> </p> <div ng-show="false" class="dropdown pull-right" ng-cloak> <button class="btn btn-default btn-login dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown"> <span id="currentUserName"> </span> <span class="caret"></span> </button> <ul class="dropdown-menu login" role="menu" aria-labelledby="dropdownMenu1"> <li role="presentation"><a role="menuitem" tabindex="-1" href="/passageiros/en/mycp/area-pessoal">Personal Area</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="/passageiros/en/mycp/area-pessoal/dados-pessoais">Personal Data</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="/passageiros/en/mycp/area-pessoal/profile-data">Profile Data</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="/passageiros/en/mycp/area-pessoal/consents">Consents</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="/passageiros/en/mycp/area-pessoal/alterar-password">Change Password</a></li> <li role="presentation" class="divider"></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="/sites/j_spring_security_logout">Logout </a></li> </ul> </div> <script> var app = angular.module('passengersModule', [ 'ui.bootstrap.showErrors' ]); </script></div> </div> </nav> </div> </div> </div> <div class="navbar navbar-default navbar-logo" role="navigation"> <div class="container"> <div> <div class="navbar-header"> <a href="/passageiros/en/" class="navbar-brand"> <img src="/StaticFiles/CP/resources/images/cp_logo.png" alt="logo CP"/> </a> </div> </div> <div class="navbar-collapse collapse"> <div> <div class="nav navbar-nav navbar-right"> <form class="navbar-form" role="search" action="/passageiros/en/Search-results"> <div class="input-group search"> <input name="q" type="text" class="form-control" placeholder="Search" > <div class="input-group-btn"> <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button> </div> </div> </form> </div> </div> </div> </div> </div> </div> <!-- End of pre-header --> <div class="wrapper-content"> <!-- Begin of Menu --> <div> <div> <div class="sidebar-menu"> <form role="search" action="/passageiros/en/Search-results"> <div class="input-group"> <input name="q" type="text" class="form-control input-sm" placeholder="" accesskey="1"> <div class="input-group-btn"> <button class="btn btn-default btn-sm" type="submit"><img src="/StaticFiles/CP/resources/images/lupa-small.png" alt="Search"></button> </div> </div> </form> <ul class="languages-menu"> <li ><a href="/passageiros/pt/">PT</a></li> <li class="active"><a href="/passageiros/en/">EN</a></li> </ul> <ul class="titles-menu"> <li> <a href="/passageiros/en/mycp/area-pessoal/your-tickets"> <img src="/StaticFiles/CP/resources/images/icons/tickets-icon.png" alt="Your tickets"> <span class="pre-menu"> Your </span> tickets </a> </li> <li> <a href="/passageiros/en/train-times"> <img src="/StaticFiles/CP/resources/images/timer-sm.png" alt="Train times"> <span class="pre-menu"> Train </span> times </a> </li> <li> <a href="/passageiros/en/buy-tickets"> <img src="/StaticFiles/CP/resources/images/tickets-sm.png" alt="Buy Tickets"> <span class="pre-menu"> Buy </span> Tickets </a> </li> <li> <a href="/passageiros/en/buy-leisure"> <img src="/StaticFiles/CP/resources/images/leisure-sm.png" alt="Buy Leisure"> <span class="pre-menu"> Buy </span> Leisure </a> </li> <li> <a href="/passageiros/en/how-to-travel"> <img src="/StaticFiles/CP/resources/images/travel-sm.png" alt="How to travel"> <span class="pre-menu"> How to </span> travel </a> </li> <li> <a href="/passageiros/en/discounts-benefits"> <img src="/StaticFiles/CP/resources/images/advantages-sm.png" alt="Discounts and Benefits"> <span class="pre-menu"> Discounts and </span> Benefits </a> </li> </ul> <ul class="sites-menu"> <li class="title-area"><span>Ir Para</span></li> <li class="active"><a href="/passageiros/en/">Passengers</a></li> <li ><a href="/institucional/en/">Institutional</a></li> </ul> </div> <div class="menu-main"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="btn-group btn-group-justified first-menu"> <div class="btn-group"> <a class="btn btn-nav" href="/passageiros/en/train-times"> <img src="/StaticFiles/CP/resources/images/timer.png" alt="Train times"> <span class="desc-menu"> Train <span class="title-menu"> times </span> </span> </a> </div> <div class="btn-group"> <a class="btn btn-nav" href="/passageiros/en/buy-tickets"> <img src="/StaticFiles/CP/resources/images/tickets.png" alt="Buy Tickets"> <span class="desc-menu"> Buy <span class="title-menu"> Tickets </span> </span> </a> </div> <div class="btn-group"> <a class="btn btn-nav" href="/passageiros/en/buy-leisure"> <img src="/StaticFiles/CP/resources/images/leisure.png" alt="Buy Leisure"> <span class="desc-menu"> Buy <span class="title-menu"> Leisure </span> </span> </a> </div> <div class="btn-group"> <a class="btn btn-nav" href="/passageiros/en/how-to-travel"> <img src="/StaticFiles/CP/resources/images/travel.png" alt="How to travel"> <span class="desc-menu"> How to <span class="title-menu"> travel </span> </span> </a> </div> <div class="btn-group"> <a class="btn btn-nav" href="/passageiros/en/discounts-benefits"> <img src="/StaticFiles/CP/resources/images/advantages.png" alt="Discounts and Benefits"> <span class="desc-menu"> Discounts and <span class="title-menu"> Benefits </span> </span> </a> </div> </div> </div> </div> </div> </div> </div> </div> <!-- End of Menu --> <!-- Begin of Container --> <div class="container"> <div> <div> <div class="clear"></div> <div class="alerts-main"> <div id="alerts-carousel" class="carousel slide alerts"> <div class="navigation-alerts"> <img src="/StaticFiles/CP/resources/images/alert-icon.png" alt="Imagem de Alerta"> <a class="carousel-control left" href="#alerts-carousel" data-slide="prev">‹</a> <a class="carousel-control right" href="#alerts-carousel" data-slide="next">›</a> </div> <div class="carousel-inner"> <div class="item active"> <div class="carousel-caption"> <p><a href="/passageiros/en/train-times/Alerts/strike" >Strike - Train disruptions - from 28 March to 2 May </a></p> </div> </div> <div class="item "> <div class="carousel-caption"> <p><a href="/passageiros/en/train-times/Alerts/leixoes-opens-9-february" >Leix玫es line opens to the public on 9 February </a></p> </div> </div> </div> <a href="/passageiros/en/train-times/Alerts" class="view-all" >+ Warnings</a> </div> </div> <div class="clear"></div> <div class="row"> <div class="col-md-12"> <div class="alerts-mobile"> <div class="panel-group alerts-collapse" id="accordion-alerts"> <div class="panel panel-default"> <div class="panel-heading info" data-toggle="collapse" data-parent="#accordion-alerts" href="#collapse-avisos" style="background-color: #ef8e37;"> <p class="panel-title" style="background-color: #ef8e37;"> <a href="/passageiros/en/train-times/Alerts" data-original-title="" title="" style="background-color: #ef8e37;color: #ffffff;"> <span class="glyphicon glyphicon-exclamation-sign"> </span> Warnings </a> </p> </div> <div id="collapse-avisos" class="panel-collapse collapse-alerts collapse"> <div class="panel-body" > <ul> <li><a href="/passageiros/en/train-times/Alerts/strike" >Strike - Train disruptions - from 28 March to 2 May </a></li> <li><a href="/passageiros/en/train-times/Alerts/leixoes-opens-9-february" >Leix玫es line opens to the public on 9 February </a></li> </ul> </div> </div> </div> </div> </div> </div> </div> <div class="clear"></div> </div><div> <script src="/StaticFiles/CP/resources/js/angular.min.js"></script> <script type="text/javascript"> $.extend($.fn.pickadate.defaults, { monthsFull: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], today: 'Today', clear: 'Clear', close: 'Close', labelMonthNext: 'Next month', labelMonthPrev: 'Previous month', labelMonthSelect: 'Select a month', labelYearSelect: 'Select a year' }); </script> <div class="row"> <div class="col-md-12"> <!-- Begin of Carousel Main--> <div id="search-area" class="content-area" > <div class="carousel-inner"> <div class="active item"> <img src="/StaticFiles/CP/resources/images/backgrounds/horarios_background_novoap.jpg" alt="Timetables and Prices"> <div class="carousel-caption clearfix"> <div class="col-md-12"><h1>Timetables and Prices</h1></div> <!-- Begin of Travel Search--> <form class="form" role="form" action="/sites/passageiros/en/train-times/Train-time-results" method="post" name="searchTimetable"> <input type="hidden" name="allServices" value="allServices"/> <div class="col-md-12"> <div class="col-md-10" ng-controller="locationController"> <div class="col-md-5"> <div class="input-group" ng-class="{'has-error': showDepartError && searchTimetable.depart.$dirty && searchTimetable.depart.$invalid, 'has-success': searchTimetable.depart.$valid}"> <span class="input-group-addon"><img src="/StaticFiles/CP/resources/images/icons/partida.png" alt="Place"> </span> <input class="typeahead form-control" type="text" title="From " placeholder="From " name="depart" accesskey="2" autocomplete="off" required ng-model="depart" ng-change="onDepartChange()" ng-keypress="showDepartError=false" ng-blur="showDepartError=searchTimetable.depart.$invalid" ng-init="showDepartError=false"> </div> </div> <div class="col-md-5"> <div class="input-group" ng-class="{'has-error': showArrivalError && searchTimetable.arrival.$dirty && searchTimetable.arrival.$invalid, 'has-success': searchTimetable.arrival.$valid}"> <span class="input-group-addon"><img src="/StaticFiles/CP/resources/images/icons/destino.png" alt="Place"> </span> <input class="typeahead form-control" type="text" title="To " placeholder="To " name="arrival" accesskey="3" autocomplete="off" required ng-model="arrival" ng-change="onArrivalChange()" ng-keypress="showArrivalError=false" ng-blur="showArrivalError=searchTimetable.arrival.$invalid" ng-init="showArrivalError=false"> </div> </div> </div> <div class="col-md-10" ng-controller="dateController"> <div class="col-md-5"> <div class="input-group date" ng-class="{'has-error': showDepartDateError && searchTimetable.Date.$invalid, 'has-success': searchTimetable.Date.$valid}"> <span class="input-group-addon "><img src="/StaticFiles/CP/resources/images/icons/icone_calendario.png" alt="Calendar"> </span> <div class="fieldset__wrapper"> <input autocomplete="off" data-value="2025-04-08" type="text" class="form-control" name="Date" id="datepicker-first" placeholder="Date" title="Date" required ng-model="departDate" ng-change="updateFirstDate()" ng-keypress="showDepartDateError=false" ng-blur="showDepartDateError=searchTimetable.Date.$invalid" ng-init="showDepartDateError=false" accesskey="4"> </div> </div> </div> <div class="col-md-5"> <div class="input-group date" ng-class="{'has-error': showReturnDateError && searchTimetable.turnDate.$invalid}"> <span class="input-group-addon "><img src="/StaticFiles/CP/resources/images/icons/icone_calendario.png" alt="Calendar"> </span> <input autocomplete="off" type="text" class="form-control" name="turnDate" ng-model="returnDate" id="datepicker-second" placeholder="Return date" title="Return date" accesskey="5" ng-change="updateSecondDate()" ng-keypress="showReturnDateError=false" ng-blur="showReturnDateError=searchTimetable.turnDate.$invalid" ng-init="showReturnDateError=false"> </div> </div> <div class="col-md-10 col-lg-10 mtop"> <input type="submit" value="Submit »" accesskey="6" class="btn btn-primary btn-green pull-right" role="button" ng-disabled="searchTimetable.$invalid"/> </div> </div> </div> </form> </div> </div> </div> </div> </div> </div> <script type="text/javascript"> $('.selectpicker').selectpicker(); var firstDate = $("#datepicker-first").pickadate({ formatSubmit: 'yyyy-mm-dd', editable: true, hiddenPrefix: 'depart', hiddenSuffix: '', min: true, max: 59 }); var secondDate = $("#datepicker-second").pickadate({ formatSubmit: 'yyyy-mm-dd', editable: true, hiddenPrefix: 're', hiddenSuffix: '', min: true, max: 59 }); var stations = {}; jQuery.ajax({ url: "/sites/spring/station-index", success: function(data) { stations = data; }, async: false, dataType: "json", cache: true }); app.controller('dateController', ['$scope', function($scope) { $scope.departDate = "8 April, 2025"; $scope.updateFirstDate = function() { if($scope.departDate === "" || $scope.departDate === undefined ) { $scope.searchTimetable.Date.$setValidity('parse', true); $scope.searchTimetable.Date.$setValidity('calendar', true); firstDate.pickadate('picker').set('clear'); firstDate.pickadate('picker').set('highlight', new Date()); return; } var chosenDate = extractDate($scope.departDate); if(chosenDate == "") { $scope.searchTimetable.Date.$setValidity('parse', false); } else { $scope.searchTimetable.Date.$setValidity('parse', true); var dateText = verifyDate(chosenDate); if(dateText == "") { $scope.searchTimetable.Date.$setValidity('calendar', false); } else { $scope.searchTimetable.Date.$setValidity('calendar', true); firstDate.pickadate('picker').set('select', dateText, { format: 'yyyy-mm-dd' }); } $scope.checkDate('1'); } } $scope.updateSecondDate = function() { if($scope.returnDate === "" || $scope.returnDate === undefined) { $scope.searchTimetable.turnDate.$setValidity('parse', true); $scope.searchTimetable.turnDate.$setValidity('calendar', true); secondDate.pickadate('picker').set('clear'); secondDate.pickadate('picker').set('highlight', new Date()); return; } var chosenDate = extractDate($scope.returnDate); if(chosenDate == "") { $scope.searchTimetable.turnDate.$setValidity('parse', false); } else { $scope.searchTimetable.turnDate.$setValidity('parse', true); var dateText = verifyDate(chosenDate); if(dateText == "") { $scope.searchTimetable.turnDate.$setValidity('calendar', false); } else { $scope.searchTimetable.turnDate.$setValidity('calendar', true); secondDate.pickadate('picker').set('select', dateText, { format: 'yyyy-mm-dd' }); } $scope.checkDate('2'); } } $scope.checkDate = function(e) { var pick1 = 0; if(firstDate.pickadate('picker').get('select')) pick1 = firstDate.pickadate('picker').get('select').pick; var pick2 = 0; if(secondDate.pickadate('picker').get('select')) pick2 = secondDate.pickadate('picker').get('select').pick; if(pick1 > pick2) { if (e === "1") { $scope.returnDate = (pick2 !== 0 && pick1 !== 0) ? $scope.departDate : $scope.returnDate; var $datepicker = $("#datepicker-first").pickadate(); var $datepicker2 = $("#datepicker-second").pickadate(); if ($datepicker != null && $datepicker2 != null && $scope.returnDate !== undefined && $scope.returnDate !== "") { $datepicker.pickadate('picker').set('select', $scope.returnDate); $datepicker2.pickadate('picker').set('select', $scope.returnDate); } } else { $scope.departDate = (pick1 !== 0 && pick2 !== 0) ? $scope.returnDate : $scope.departDate; var $datepicker2 = $("#datepicker-second").pickadate(); var $datepicker = $("#datepicker-first").pickadate(); if ($datepicker != null && $datepicker2 != null && $scope.departDate !== undefined) { $datepicker.pickadate('picker').set('select', $scope.departDate); $datepicker2.pickadate('picker').set('select', $scope.departDate); } } } } }]); app.controller('locationController', ['$scope', function($scope) { $scope.departCode = ""; $scope.arrivalCode = ""; $scope.onDepartChange = function() { var lowerName = ($scope.depart === undefined ? undefined : $scope.depart.toLowerCase()); var code = stations[lowerName]; $scope.departCode = code; if(code == undefined) { $scope.searchTimetable.depart.$setValidity('code', false); } else { $scope.searchTimetable.depart.$setValidity('code', true); } $scope.checkDestination(); } $scope.onArrivalChange = function() { var lowerName = ($scope.arrival === undefined ? undefined : $scope.arrival.toLowerCase()); var code = stations[lowerName]; $scope.arrivalCode = code; if(code == undefined) { $scope.searchTimetable.arrival.$setValidity('code', false); } else { $scope.searchTimetable.arrival.$setValidity('code', true); } $scope.checkDestination(); } $scope.checkDestination = function() { if($scope.departCode == $scope.arrivalCode) { $scope.searchTimetable.arrival.$setValidity('unique', false); } else { $scope.searchTimetable.arrival.$setValidity('unique', true); } } }]); function extractDate(dateStr) { var splitStr = dateStr.split(" "); if(splitStr.length != 3) { return ""; } var day = parseInt(splitStr[0]); if(day == NaN) { return ""; } var year = parseInt(splitStr[2]); if(year == NaN) { return ""; } var monthText = splitStr[1].replace(/\,/g, ""); var month = -1; var monthArray = $("#datepicker-first").pickadate('picker').component.settings.monthsFull; if(monthText == "Mar莽o") { // special case due to the '莽' character month = 2; } else { for(var i = 0; i < 12; i++) { if(monthText == monthArray[i]) { month = i; break; } } } if(month == -1) { return ""; } var d = new Date(year, month, day); return d; } function verifyDate(date) { var minDate = new Date(); minDate.setHours(0); minDate.setMinutes(0); minDate.setSeconds(0); minDate.setMilliseconds(0); var maxDate = new Date(minDate.getTime()); maxDate.setDate(maxDate.getDate() + 59); if((date < minDate) || (date > maxDate)) { return ""; } var year = date.getFullYear().toString(); var month = (date.getMonth() + 1).toString(); var day = date.getDate().toString(); var textDate = year + "-" + (month[1] ? month : "0" + month) + "-" + (day[1] ? day : "0" + day); return textDate; } </script></div><div> <div class="call-services" > <div class="col-md-12 services" style="margin-bottom: 15px;"> <div class="container"> <div class="row"> <div class="col-md-12 "> <ul class="access-links"> <li><a href="https://www.booking.com/index.html?aid=1634865&label=cob-aw-homepage" target="_blank" data-original-title="" title="Booking.com"> <img src="/StaticFiles/Passageiros/6_tranversais/Call Actions/booking.png" > <span>Booking.com</span></a> </li> | <li><a href="/passageiros/en/discounts-benefits/Benefits-and-special-offers/kit-cp-avis" data-original-title="" title="Kit CP/Avis"> <img src="/StaticFiles/Passageiros/6_tranversais/Call Actions/carro.png" > <span>Kit CP/Avis</span></a> </li> | <li><a href="/passageiros/en/train-times/next-trains" data-original-title="" title="Next trains"> <img src="/StaticFiles/Passageiros/6_tranversais/Call Actions/icon-itr.png" > <span>Next trains</span></a> </li> </ul> </div> </div> </div> </div> </div> <div class="clear"></div></div><div> <div id="CarouselMain" class="carousel slide main-slider" data-interval="3000" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#CarouselMain" data-slide-to="0" class="active"></li> <li data-target="#CarouselMain" data-slide-to="1" ></li> <li data-target="#CarouselMain" data-slide-to="2" ></li> <li data-target="#CarouselMain" data-slide-to="3" ></li> <li data-target="#CarouselMain" data-slide-to="4" ></li> </ol> <div class="carousel-inner"> <div class="active item"> <a href="/passageiros/en/discounts-benefits/Discounts/ferroviario-verde" ><img src="/StaticFiles/Passageiros/4_vantagens/descontos/banners/banner-passe-ferroviario-verde.jpg" alt="" title=""> </a> <div class="carousel-caption left "> <p>聽</p> <p>聽</p> <p><span style="font-size: xx-large;">Green Rail Pass</span></p> <p><span style="font-size: x-large;">Simple, flexible and environmentally friendly</span></p> <p><span style="font-size: large;"><a href="/passageiros/en/discounts-benefits/Discounts/ferroviario-verde">See the conditions</a><br /></span></p></div> </div> <div class=" item"> <a href="/passageiros/en/discounts-benefits/Discounts/turistico" ><img src="/StaticFiles/Passageiros/4_vantagens/descontos/banners/banner-bilhete-turistico.jpg" alt="" title=""> </a> <div class="carousel-caption left "> <p>聽</p> <p><span style="font-size: xx-large;">Tourist Travelcard</span></p> <p><span style="font-size: x-large;">It is the place聽</span><span style="font-size: x-large;">to get to know<br /></span><span style="font-size: x-large;">the best of Portugal.</span></p> <p><span style="font-size: x-large;">Lisbon, Porto <br />and Algarve.</span></p> <p><span style="font-size: large;"><a href="/passageiros/en/discounts-benefits/Discounts/turistico">Further details</a></span></p></div> </div> <div class=" item"> <a href="/passageiros/en/how-to-travel/For-leisure/Nature-and-Culture/comboio-presidencial" ><img src="/StaticFiles/Passageiros/3_viajar/1_lazer/1_cultura_natureza/comboio presidencial/banner-presidencial.jpg" alt="" title=""> </a> <div class="carousel-caption left "> <p>聽</p> <p>聽</p> <p><span style="font-size: xx-large;">Presidential train<br /> <span style="font-size: x-large;">by Chakall</span></span></p> <p><span style="font-size: x-large;">an invitation to something magical</span></p> <p><span style="font-size: large;">Further details聽<a href="/passageiros/en/how-to-travel/For-leisure/Nature-and-Culture/comboio-presidencial">here</a></span></p></div> </div> <div class=" item"> <a href="/passageiros/en/discounts-benefits/Highlights/linha-de-leixoes" ><img src="/StaticFiles/Passageiros/4_vantagens/destaques/banner/banner-leixoes-en.jpg" alt="" title=""> </a> <div class="carousel-caption left "> <p>聽</p> <p>聽</p> <p><span style="font-size: xx-large;">Discover Leix玫es line</span></p> <p><span style="font-size: x-large;">Since 9 February</span></p> <p><a href="/passageiros/en/discounts-benefits/Highlights/linha-de-leixoes">Further details</a></p></div> </div> <div class=" item"> <a href="/passageiros/en/train-times/next-trains" ><img src="/StaticFiles/Passageiros/6_tranversais/banners/banner-proximos-comboios.jpg" alt="" title=""> </a> <div class="carousel-caption left "> <p>聽</p> <p><span style="font-size: xx-large;">Real Time Information</span></p> <p><span style="font-size: x-large;">All the information about the next trains at the nearest stations.</span></p> <p><span style="font-size: large;"><a href="/passageiros/en/train-times/next-trains">See here</a></span></p></div> </div> </div> <a class="carousel-control left" href="#CarouselMain" role="button" data-slide="prev"> <img src="/StaticFiles/CP/resources/images/left.png" alt="Previous"> </a> <a class="carousel-control right" href="#CarouselMain" role="button" data-slide="next"> <img src="/StaticFiles/CP/resources/images/right.png" alt="Next"> </a> </div> </div><div> <!-- Destaques HP: Tue Apr 08 10:01:13 WEST 2025 --> <div class="row"> <div class="col-md-12"> <div class="carousel-swipe owl-carousel"> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Discounts/senior"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/descontos/etarios/senior-p.jpg" alt="Travel by train from north to south of the country for half-price."> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Discounts/senior" >Senior citizens - 50% off</a></h3> <div class="desc"> <p>Travel by train from north to south of the country for half-price.</p> </div> </div> </div> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Discounts/criancas"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/descontos/etarios/crianca-p.jpg" alt="Take the kids on a train journey for half the price."> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Discounts/criancas" >Children - half-price</a></h3> <div class="desc"> <p>Take the kids on a train journey for half the price.</p> </div> </div> </div> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Discounts/jovem"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/descontos/etarios/jovem2024-p.jpg" alt="All your destinations are just a discount away. 25% off all your train journeys until you are 25."> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Discounts/jovem" >25% discount for young people</a></h3> <div class="desc"> <p>All your destinations are just a discount away. 25% off all your train journeys until you are 25.</p> </div> </div> </div> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Highlights/beira-alta"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/destaques/outros/2025/beira-alta-6abril-p.jpg" alt="Reopening of the train service between Mangualde and Celorico da Beira."> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Highlights/beira-alta" >Beira Alta line</a></h3> <div class="desc"> <p>Reopening of the train service between Mangualde and Celorico da Beira.</p> </div> </div> </div> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Highlights/cascais"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/destaques/outros/2025/cascais-7-abril-p-en.jpg" alt="See all the information on the changes resulting from the on-going works. "> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Highlights/cascais" >Cascais Line - Replacement bus service</a></h3> <div class="desc"> <p>See all the information on the changes resulting from the on-going works.</p> </div> </div> </div> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Benefits-and-special-offers/museu-eca-queiroz"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/vantagens/cultura/eca_queiroz_p.jpg" alt="Learn about the life and works of one of the greatest authors in Portuguese literature in a visit to the E莽a de Queiroz museum."> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Benefits-and-special-offers/museu-eca-queiroz" >E莽a de Queiroz Museum</a></h3> <div class="desc"> <p>Learn about the life and works of one of the greatest authors in Portuguese literature in a visit to the E莽a de Queiroz museum.</p> </div> </div> </div> <div class="item"> <div class="thumbnail"> <a href="/passageiros/en/discounts-benefits/Benefits-and-special-offers/fc_porto"> <img class="owl-lazy" data-src="/StaticFiles/Passageiros/4_vantagens/vantagens/atividades/dragao_p.jpg" alt="Get a group of friends together and come to discover the history of FC Porto by train."> <div class="overlay"> <img alt="See details" src="/StaticFiles/CP/resources/images/plus.png"> </div> </a> </div> <div class="caption"> <h3><a href="/passageiros/en/discounts-benefits/Benefits-and-special-offers/fc_porto" >FC Porto Partnership</a></h3> <div class="desc"> <p>Get a group of friends together and come to discover the history of FC Porto by train.</p> </div> </div> </div> </div> </div> </div> <script type="text/javascript"> $('.owl-carousel').owlCarousel({ margin:15, responsiveClass:true, loop:false, nav:false, lazyLoad:true, mouseDrag: false, responsive:{ 0:{ items:1, }, 768:{ items:2, }, 992:{ items:3, }, 1200:{ items:4 } } } ); </script></div> </div> </div> <!-- End of container --> <div class="container"> <div class="row"> <div class="col-md-12 share-this"> <div class="pull-right"> <span class='st_facebook_large' title='Facebook'></span> <span class='st_twitter_large' title='Tweet'></span> <span class='st_sharethis_large' title='ShareThis'></span> <span class='st_email_large' title='Email'></span> </div> </div> </div> </div> <!-- Begin of Footer--> <div class="footer"> <div> <div> <div class="footer-contacts-newsletter"> <div class="container"> <div class="row"> <div class="col-md-8"> <ul class="short-contacts"> <li style="border-right: 0;"><img alt="App CP" src="/StaticFiles/CP/resources/images/icones_rodape/app.png"> <a href="/passageiros/en/cp-app" data-original-title="" title=""><p>App</p></a> </li> <li style="border-right: 0;"> <img src="/StaticFiles/CP/resources/images/icones_rodape/contacts_icon.png" alt="Contact CP"> <a href="/passageiros/en/Contacts"> <p> Contacts </p> </a> </li> <li style="border-right: 0;"> <img src="/StaticFiles/CP/resources/images/icones_rodape/portal-irregularidades.png" alt="Reporting syst"> <a target="_blank" href="https://cpdenuncias.integrityline.com/"> <p> Reporting syst </p> </a> </li> <li style="border-right: 0;"> <a target="_blank" href="https://www.livroreclamacoes.pt/inicio" data-original-title="" title=""> <img alt="Livro de Reclama脙搂脙碌es" src="/StaticFiles/CP/resources/images/icones_rodape/livro-reclamacoes-online.png"> </a> </li> </ul> </div> <a target="_blank" href="https://www.linkedin.com/company/comboios-de-portugal" data-original-title="" title="" style="text-decoration: none;padding-top: 1%; float: right;"> <img src="/StaticFiles/CP/resources/images/icones_rodape/linkedin.png" alt="LinkedIn"> </a> <a target="_blank" href="https://www.youtube.com/user/comboiosportugalmkt " data-original-title="" title="" style="text-decoration: none;padding-top: 1%; float: right;"> <img src="/StaticFiles/CP/resources/images/icones_rodape/youtube.png" alt="CP - YouTube" /> </a> <a target="_blank" href="https://www.instagram.com/cp_comboiosdeportugal/" data-original-title="" title="" style="text-decoration: none;padding-top: 1%; float: right;"> <img src="/StaticFiles/CP/resources/images/icones_rodape/instagram.png" alt="cp_comboiosdeportugal - Instagram" /> </a> <a target="_blank" href="https://www.facebook.com/CP" data-original-title="" title="" style="text-decoration: none;padding-top: 1%; float: right;"> <img src="/StaticFiles/CP/resources/images/icones_rodape/facebook.png" alt="CP - Comboios de Portugal - Facebook" /> </a> </div> </div> </div></div><div> <div class="container"> <div class="footer-category-links"> <div class="row"> <div class="col-md-12"> <div class="col-xs-2 col-xs-offset-1"> <ul class="general-links"> <li class="links-headline"><a href="/passageiros/en/train-times">Train times</a></li> <li><a href="/passageiros/en/train-times/Prices">Prices</a></li> <li><a href="/passageiros/en/train-times/Stations">Stations</a></li> <li><a href="/passageiros/en/train-times/Alerts">Alerts</a></li> <li><a href="/passageiros/en/train-times/next-trains">Next trains</a></li> </ul> </div> <div class="col-xs-2 "> <ul class="general-links"> <li class="links-headline"><a href="/passageiros/en/buy-tickets">Buy Tickets</a></li> <li><a href="/passageiros/en/buy-tickets/Sales-points">Sales points</a></li> </ul> </div> <div class="col-xs-2 "> <ul class="general-links"> <li class="links-headline"><a href="/passageiros/en/buy-leisure">Buy Leisure</a></li> </ul> </div> <div class="col-xs-2 "> <ul class="general-links"> <li class="links-headline"><a href="/passageiros/en/how-to-travel">How to travel</a></li> <li><a href="/passageiros/en/how-to-travel/For-leisure">For leisure</a></li> <li><a href="/passageiros/en/how-to-travel/On-business">On business</a></li> <li><a href="/passageiros/en/how-to-travel/In-group">In group</a></li> <li><a href="/passageiros/en/how-to-travel/Every-day">Every day</a></li> <li><a href="/passageiros/en/how-to-travel/kids">CP Kids</a></li> <li><a href="/passageiros/en/how-to-travel/Virtual-journey">Virtual journey</a></li> <li><a href="/passageiros/en/how-to-travel/Special-needs-customers">Special needs customers</a></li> <li><a href="/passageiros/en/how-to-travel/Useful-information">Useful information</a></li> </ul> </div> <div class="col-xs-2 "> <ul class="general-links"> <li class="links-headline"><a href="/passageiros/en/discounts-benefits">Discounts and Benefits</a></li> <li><a href="/passageiros/en/discounts-benefits/Discounts">Discounts</a></li> <li><a href="/passageiros/en/discounts-benefits/Benefits-and-special-offers">Benefits and special offers</a></li> <li><a href="/passageiros/en/discounts-benefits/Highlights">Highlights</a></li> </ul> </div> </div> </div> </div> </div></div><div> <div class="col-md-12 copyrights-footer"> <div class="container"> <div class="row"> <div class="col-md-3"> <p class="copyrights">CP, all rights reserved</p> </div> <div class="col-md-6"> <ul class="access-links"> <li><a href="/passageiros/en/accessibility">cp.pt accessibility</a></li> | <li><a href="/passageiros/en/legal">Legal</a></li> | <li><a href="/institucional/en/cookies-policy">Cookies policy</a></li> | <li><a href="/institucional/en/privacy-policy">Privacy policy</a></li> | <li> <a href="/passageiros/en/Contacts">Contacts</a> </li> </ul> </div> <div class="col-md-3"> <img src="/StaticFiles/CP/resources/images/logo-cp-footer.png" alt="logo CP"> </div> </div> </div> </div> </div> </div> </div> <!-- End of footer --> </div> </div> <!-- Enterprise Bot Chat Resources - START --> <script type="text/javascript"> var currentBotId = 'en-cp'; </script> <script src="https://cp.enterprisebot.co/dist/en-cp/ebInitChatWindow.bundle.js"></script> <!-- Enterprise Bot Chat Resources - END --> </body> </html>