Vinaròs

Las estaciones son algo más que un lugar desde el que subir a un tren o desembarcar del mismo. Además de prestar sus servicios a los viajeros y usuarios, muchas de ellas constituyen una referencia en las localidades donde su ubican.
Aquí se pueden conocer los horarios de llegadas y salidas de la estación, así como los servicios que se ofrecen en su recinto e instalaciones. Para ello acceda a dicha información a través del selector que ponemos a su disposición.
-
jueves 30/04/2026
-
Hora actual - 16:10 h
-
Estado de la Red
Salidas
| Hora de salida | Destino | Tren | Vía |
|---|
No se ha podido recuperar información de circulación.
Llegadas
| Hora de llegada | Origen | Tren | Vía |
|---|---|---|---|
|
16:22
16:47
|
RF - REGIONAL14302 |
2
|
|
|
17:00
17:05
|
RF - REGIONAL14446 |
3
|
|
|
17:59
|
RF - REGIONAL14450 |
3
|
|
|
18:43
18:50
|
RF - ALVIA00694 |
2
|
|
|
18:56
|
RF - REGIONAL14464 |
3
|
|
|
19:07
|
RF - INTERCITY00460 |
2
|
|
|
19:07
|
RF - REGIONAL14304 |
1
|
|
|
19:51
|
RF - RODALIES-R1618096 |
2
|
|
|
21:00
|
RF - REGIONAL14452 |
1
|
|
|
22:19
|
RF - REGIONAL EXPRES14016 |
2
|
|
| Compartido: Regional 38016 València Estació del Nord - Vinaròs | |||
|
23:03
|
RF - RODALIES-R1618055 |
3
|
|
| Por obras entre Sitges y Garraf este tren puede sufrir alteraciones en su recorrido. Consulte días y tramos afectados en www.renfe.com, @InfoRenfe, rodalies.gencat.cat y @rodalies. | |||
|
08:16
|
RF - REGIONAL EXPRES33714 |
1
|
|
|
09:03
|
RF - REGIONAL14432 |
3
|
|
|
09:27
|
RF - ALVIA00697 |
1
|
|
| Por obras, el recorrido entre Linares y Córdoba se realiza por carretera. Más información en www.renfe.com y @InfoRenfe | |||
|
10:16
|
RF - REGIONAL EXPRES30720 |
2
|
|
|
11:59
|
RF - REGIONAL14462 |
3
|
|
|
12:48
|
RF - INTERCITY00463 |
1
|
|
|
13:14
|
RF - RODALIES-R1618093 |
1
|
|
|
14:13
|
RF - REGIONAL EXPRES30722 |
1
|
|
|
15:14
|
RF - TALGO11131 |
1
|
|
|
16:22
|
RF - REGIONAL14302 |
2
|
|
|
17:59
|
RF - REGIONAL14450 |
3
|
|
|
18:43
|
RF - ALVIA00694 |
2
|
|
|
18:56
|
RF - REGIONAL14464 |
3
|
|
|
19:07
|
RF - INTERCITY00460 |
2
|
|
No se ha podido recuperar información de circulación.
Informacion de la estación
-
Dirección
Pza. Estación Ferrocarril, s/n --- 12500 Vinaròs --- CASTELLON / CASTELLO
-
Horario
Diario: 06:00 a 23:20
Intermodalidad
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> lista3[cur_elem?index+1].tituloAdaptados [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" at line 166, column 112]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if (texto == "Adaptados" && esMayor(... [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" in macro "orderServicesList" at line 166, column 41]
- Reached through: @orderServicesList lista, texto [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" in macro "listPaint" at line 49, column 9]
- Reached through: @listPaint serviciosAdaptados.idAdapt... [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" at line 44, column 9]
----
1<script type="text/javascript">
2
3
4function cierraDetalles(){
5 var detalles = $("div[id^='detalleServicio']");
6 var iconos = $("[id^='button-detalleServicio']");
7 for (let detalle of detalles) {
8 detalle.style.display = 'none'
9 }
10 for (let icono of iconos) {
11 icono.setAttribute('aria-expanded', 'false');
12 }
13}
14
15function toggle(id, id2) {
16
17
18 var n = document.getElementById(id);
19 if (n.style.display != 'none')
20 {
21 n.style.display = 'none';
22 document.getElementById(id2).setAttribute('aria-expanded', 'false');
23 }
24 else
25 {
26 cierraDetalles();
27 n.style.display = '';
28 document.getElementById(id2).setAttribute('aria-expanded', 'true');
29 }
30}
31 </script>
32
33<#if servicios?? && servicios.id?? && servicios.id.getSiblings()?has_content>
34 <div class="title-servicios">
35 <h3><@liferay.language key="es.adif.estacion.servicios"/></h3>
36 </div>
37 <@listPaint servicios.id.getSiblings() ""/>
38</#if>
39
40<#if serviciosAdaptados?? && serviciosAdaptados.idAdaptados?? && serviciosAdaptados.idAdaptados.getSiblings()?has_content>
41 <div class="title-servicios">
42 <h3><@liferay.language key="es.adif.estacion.servicios-adaptados"/></h3>
43 </div>
44 <@listPaint serviciosAdaptados.idAdaptados.getSiblings() "Adaptados"/>
45</#if>
46
47<#macro listPaint lista texto>
48
49 <@orderServicesList lista texto/>
50
51 <#list listaOrdenada as cur_id>
52
53 <#if cur_id?index %3 == 0>
54 <#assign
55 hay1 = listaOrdenada[cur_id?index+1]??
56 hay2 = listaOrdenada[cur_id?index+2]??
57 />
58 <div class="servicios-estacion" id="servicios-estacion">
59 <@boxPaint cur_id cur_id?index texto/>
60 <#if hay1>
61 <@boxPaint listaOrdenada[cur_id?index+1] cur_id?index+1 texto/>
62 <#if hay2>
63 <@boxPaint listaOrdenada[cur_id?index+2] cur_id?index+2 texto/>
64 </#if>
65 </#if>
66 </div>
67 <@detailPaint cur_id cur_id?index texto/>
68 <#if hay1>
69 <@detailPaint listaOrdenada[cur_id?index+1] cur_id?index+1 texto/>
70 <#if hay2>
71 <@detailPaint listaOrdenada[cur_id?index+2] cur_id?index+2 texto/>
72 </#if>
73 </#if>
74 </#if>
75
76 </#list>
77
78</#macro>
79
80<#macro boxPaint elem index texto>
81 <#if texto!="Adaptados">
82 <#if elem.popServicios.getData() ?? && elem.popServicios.getData() != "">
83 <button class="linkServiciosDesp" id="button-detalleServicio${texto}-${index}" aria-expanded="false" aria-controls="detalleServicio${texto}-${index}" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">
84 </#if>
85 <div class="servicio-estacion" id="iconoServicio${texto}-${index}">
86 <div class="servicio-estacion-icono" style="background-image:url('${elem.icono.getData()}')"></div><!-- /.servicio-estacion-icono -->
87 <div class="servicio-estacion-datos">
88 <h4>${elem.titulo.getData()}</h4>
89 <p class="descripcion-servicios">${elem.descripcionServicios.getData()}</p>
90 <#if elem.popServicios.getData() ?? && elem.popServicios.getData() != "">
91 <p class="detalle-mas-informacion">
92 <span class="texto_servicios_responsive" data-desktoptext="Más información" data-phonetext="+"></span>
93 </p>
94 </#if>
95 </div>
96 </div>
97 <#if elem.popServicios.getData() ?? && elem.popServicios.getData() != "">
98 </button>
99 </#if>
100 <#else>
101 <#if elem.popAdaptados.getData() ?? && elem.popAdaptados.getData() != "">
102 <button class="linkServiciosDesp" id="button-detalleServicio${texto}-${index}" aria-expanded="false" aria-controls="detalleServicio${texto}-${index}" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">
103 </#if>
104 <div class="servicio-estacion" id="iconoServicio${texto}-${index}">
105 <div class="servicio-estacion-icono" style="background-image:url('${elem.iconoAdaptados.getData()}'"></div><!-- /.servicio-estacion-icono -->
106 <div class="servicio-estacion-datos">
107 <h4>${elem.tituloAdaptados.getData()}</h4>
108 <p class="descripcion-servicios">${elem.descripcionAdaptados.getData()}</p>
109 <#if elem.popAdaptados.getData() ?? && elem.popAdaptados.getData() != "">
110 <p class="detalle-mas-informacion">
111 <span class="texto_servicios_responsive" data-desktoptext="Más información" data-phonetext="+"></span>
112 </p>
113 </#if>
114 </div>
115 </div>
116 <#if elem.popAdaptados.getData() ?? && elem.popAdaptados.getData() != "">
117 </button>
118 </#if>
119 </#if>
120</#macro>
121
122<#macro detailPaint elem index texto>
123 <#if texto!="Adaptados">
124 <div role="region" aria-labelledby="button-detalleServicio${texto}-${index}" class="servicios-estacion" id="detalleServicio${texto}-${index}" style="display:none">
125 <div class="servicio-estacion servicio-estacion-detalle servicio-estacion-detalle-${index%3} ">
126 <div class="servicio-estacion-icono" style="background-image:url('${elem.icono.getData()}')"></div><!-- /.servicio-estacion-icono -->
127 <div class="servicio-estacion-datos">
128 <h4>${elem.titulo.getData()}</h4>
129 ${elem.popServicios.getData()}
130 <p>
131 <button aria-label="<@liferay.language key="navigation.cerrar" /> ${elem.titulo.getData()}" class="btn-close-adif" type="button" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">×</button>
132
133 </p>
134 </div>
135 </div>
136 </div>
137 <#else>
138 <div role="region" aria-labelledby="button-detalleServicio${texto}-${index}" class="servicios-estacion" id="detalleServicio${texto}-${index}" style="display:none">
139 <div class="servicio-estacion servicio-estacion-detalle servicio-estacion-detalle-${index%3}">
140 <div class="servicio-estacion-icono" style="background-image:url('${elem.iconoAdaptados.getData()}'"></div><!-- /.servicio-estacion-icono -->
141 <div class="servicio-estacion-datos">
142 <h4>${elem.tituloAdaptados.getData()}</h4>
143 ${elem.popAdaptados.getData()}
144 <p>
145 <button class="btn-close-adif" aria-label="<@liferay.language key="navigation.cerrar" /> ${elem.tituloAdaptados.getData()}" type="button" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">×</button>
146 </p>
147 </div>
148 </div>
149 </div>
150 </#if>
151
152</#macro>
153
154<#macro orderServicesList lista texto>
155 <#assign lista2 = []>
156 <#assign lista3 = lista>
157 <#assign stop = true>
158 <#assign run = true>
159 <#assign iteraciones = lista3?size*lista3?size>
160 <#list 0..iteraciones as i>
161 <#assign run = false>
162 <#assign saltarSiguiente = false>
163 <#list lista3 as cur_elem>
164 <#if !saltarSiguiente>
165 <#if !cur_elem?is_last >
166 <#if (texto=="Adaptados" && esMayor(cur_elem.tituloAdaptados.getData(),lista3[cur_elem?index+1].tituloAdaptados.getData()))
167 || (texto!="Adaptados" && esMayor(cur_elem.titulo.getData(),lista3[cur_elem?index+1].titulo.getData()))>
168 <#assign run = true>
169 <#assign lista2 = lista2 + [lista3[cur_elem?index+1], cur_elem]>
170 <#assign saltarSiguiente = true>
171 <#else>
172 <#assign lista2 = lista2 + [cur_elem]/>
173 </#if>
174 <#else>
175 <#assign lista2 = lista2 + [cur_elem]>
176 </#if>
177 <#else>
178 <#assign saltarSiguiente = false/>
179 </#if>
180 </#list>
181 <#if !run>
182 <#break>
183 </#if>
184 <#assign lista3 = lista2>
185 <#assign lista2 = []>
186 </#list>
187
188 <#assign listaOrdenada = lista3>
189</#macro>
190
191<#function esMayor string1 string2>
192 <#assign strings = [string1,string2]?sort>
193 <#return strings[0]==string2>
194</#function>
Cafetería - Bar
Número de local: Vestíbulo

