Autor Tema: PHP string a DATE uso strtotime recuperar fecha desde formulario  (Leído 45712 veces)

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Hola. He abierto este tema, que aunque es continuación del otro pensé que sería útil para más de uno.

Pasar en PHP una fecha de "string" a "DATE".

Estoy haciendo una web (sobre fiestas en pueblos) con objetivo didáctico, y para ello he construido varios archivos:

-formulario.html (contiene un formulario que recibe los datos introducidos por el usuario: nombre del pueblo, fiesta, fecha de inicio de la fiesta y fecha de fin)
-calendario.html (saca por pantalla las fiestas agrupadas por meses).
-script.php (recibe los datos del formulario y los guarda en la base de datos localizada en 000webhost).

Se supone que la fecha debe ser introducida de una forma que no incomode al usuario, es decir en el formato dd-mm-aaaa, y no aaaa-mm-dd. Aunque en la BD sí estará en aaaa-mm-dd.

He utilizado "strtotime()" y "date()", poniendo un "echo" al final de ambas funciones para ver que me sale. Pero con "strtotime" no aparece nada y con "date" aparece el famoso "1969-12-31".

He leído tutoriales y he toqueteado bastante, pero nada... a ver si vosotros me podéis ayudar.

Dejo aquí los códigos de formulario.html y de script.php. Gracias.


FORMULARIO.HTML:
Código: [Seleccionar]
<form id="form1" name="form1" method="get" action="script.php">
<p>Pueblo:
  <input type="text" name="pueblo" value="">
  Fiesta: <input type="text" name="fiesta" value="">       
  </p>
<p>Fecha inicio (formato: día-mes-año):
  <input type="text" name="fecha_inicio" value="">
  </p>
<p>Fecha fin (formato: día-mes-año):   
          <input type="text" name="fecha_fin" value="">       
  </p>
<p>
  <input type="submit"/>
  </p>       
    </form>


SCRIPT.PHP:
Código: [Seleccionar]
<?php 

$pueblo$_GET['pueblo'];

$fiesta$_GET['fiesta'];

$fecha_inicio$_GET['fecha_inicio'];

$fecha_fin$_GET['fecha_fin'];



$fecha_inicio strtotime("$fecha_inicio");
echo "1".$fecha_inicio;
$fecha_inicio date("Y-m-d"$fecha_inicio);
echo "2".$fecha_inicio;

//$fecha_fin = date("Y-m-d",$fecha_fin);


$link mysql_connect("mysql13.000webhost.com","a4047274_fiestas","urkaka12");
if(! 
$link )
{
  die(
'No es posible conectar: ' mysql_error());
}
else
{
    echo 
"conexion correcta. "
}


mysql_select_db("a4047274_fiestas"$link);

$result=mysql_query("INSERT INTO valencia VALUES('$pueblo', '$fiesta','$fecha_inicio','$fecha_fin')"$link);

if(! 
$result )
{
  die(
'Datos no insertados de forma correcta. ' mysql_error());
}
else
{
     echo 
"datos insertados";
}
mysql_close($link);

?>
« Última modificación: 13 de Septiembre 2014, 18:53 por Alex Rodríguez »

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #1 en: 13 de Agosto 2014, 13:01 »
Antes de nada, no entiendo para que quieres realizar esas conversiones, la pagina script.php, solo se encargará de meter la información en la bbdd, no?

Pues si solo se encarga de eso, veo innecesario las conversiones que buscas realizar. Las conversiones las harás en la pagina donde le muestres la info al usuario, pero yo creo que no te es necesario realizarlas en este fichero script.php.

De todas maneras, si añades estas lineas a tu fichero script veras la manera en que se realiza la conversión, hay muchas formas de hacer esto, te presento dos formas de hacerlo:

La primera:

Código: [Seleccionar]
$fecha1= date("m-d-Y", strtotime("$fecha_inicio"));
echo $fecha1."<br>";
$fecha2=date("Y-m-d",strtotime($fecha1));
echo $fecha2;

La segunda:

Código: [Seleccionar]

$fecha1 = date_create($fecha_inicio);
$fecha2= date_format($fecha1, 'm-d-Y');
echo $fecha2."<br>";
$fecha3=date_create($fecha2);
$fecha4=date_format($fecha3,'Y-d-m');
echo $fecha4;

Añade eso a tu código y mira a ver si te vale. Como ya te digo, hay muchas formas de hacerlo, no creo que ninguna de estas dos formas sea la mas correcta, pero funcionan....

Haber si alguien con mas experiencia en php nos ilustra con alguna forma mas adecuada de hacerlo, de momento creo que esto te puede valer, bueno un saludo.

Nota: tambien puedes usar input de tipo date en lugar de los tipo text, no es compatible con todos los navegadores, pero poco a poco se va integrando.

ejemplo:
Código: [Seleccionar]
<input type="date" name="fecha_inicio" value="">   
« Última modificación: 13 de Agosto 2014, 13:18 por dongo »

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #2 en: 13 de Agosto 2014, 16:18 »
Hola.

He utilizado el código que me has dado, pero ya en la primera línea tengo problemas.

al ejecutarse este trozo de código

Código: [Seleccionar]
$fecha1= date("m-d-Y", strtotime("$fecha_inicio"));
echo $fecha1."<br>";

me sale esto por pantalla: 31-12-1969

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #3 en: 13 de Agosto 2014, 19:03 »
Que cadena de texto pones tu en el campo de fecha inicio, te paso un par de capturas.... a mi me funciona bien con PHP Version 5.4.4-14+deb7u12 en debian, quizá sea la versión.... 

La cosa es  que a mi me funciona bien....Te paso una referencia a todas las funciones de fecha y hora en php y a ver si te puedes pelear con la documentación y encontrar algo que te funcione, como te dije anteriormente hay muchas formas de hacer lo mismo y si te fijas en la lista de funciones que te paso, hay muchas que hacen lo mismo....

http://php.net/manual/es/ref.datetime.php

Como te digo, de las formas que te puse a mi me funcionan, a ver si un maki en php nos saca de la duda....Bueno un saludo y siento no haberte podido ayudar mas.



 

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #4 en: 14 de Agosto 2014, 00:31 »
Hola, he probado el código de dongo y parece que funciona perfectamente...

Código para la prueba:

   echo 'tenemos fecha inicio vale '.$fecha_inicio.'<br/>';   
   $fecha1= date("m-d-Y", strtotime("$fecha_inicio"));
   echo $fecha1."<br> y ademas ";
   $fecha2=date("Y-m-d",strtotime($fecha1));
   echo $fecha2;


Da la impresión de que URKA84 no estás haciendo la carga lógica sino una carga directa del php, me explico:

1) Cargamos el formulario como archivo con un nombre como ejemplo.html

2) Introducimos unos datos en el formulario, y en el campo fecha escribimos por ejemplo 09-05-2067

3) Al pulsarse el botón de envío se carga script.php y aparece por pantalla:

tenemos fecha inicio vale 09-05-2067
05-09-2067
y ademas 2067-09-05


Ahora invocamos directamente script.php sin cargar el formulario y nos aparece en pantalla

tenemos fecha inicio vale
12-31-1969
y ademas 1969-12-31

Pero... el php recupera el dato del formulario. Si se invoca directamente está recibiendo una fecha vacía, $fecha_inicio es una cadena vacía y php devuelve la fecha "cero", es decir, el origen de tiempo que utilizan muchos sistemas informáticos: 1 de enero de 1970 (en este caso 31 de diciembre de 1969), es decir, esto no es una fecha aleatoria sino que obedece a lo que el intérprete puede extraer a partir de la información que recibe.

No sé si el problema era esto, pero si era esto te recomendaría remitirte al curso básico de html y luego al curso básico de php, puedes encontrarlos aquí: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86

Saludos

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #5 en: 14 de Agosto 2014, 09:45 »
Hola.

La verdad es que creo que entiendo lo que me explicas, pero no entiendo porqué me dices que no utilice directamente el archivo script.php, yo lo hago a través de formulario.html.

Tengo el archivo "formulario.html" subido a internet. puedes echarle un vistazo:

http://prueba123451.site11.com/fiestas/formulario.html


en la base de datos se guardan los datos de "fecha_inicio" y "fecha_fin" como tipo "DATE", que tiene el formato YYYY-mm-dd.

Supongo que estoy haciendo algo mal.


Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #6 en: 14 de Agosto 2014, 10:22 »
Sí, lo he probado y veo lo que te aparece. Es extraño. Lo primero que tienes que comprobar es si eres capaz de recuperar el dato en el archivo php, da la impresión de que no lo está haciendo.

Prueba este código HTML en otro archivo en el servidor (créalo nuevo para despejar dudas, por ejemplo http:/ / prueba123451.site11.com/fiestas/formulario2.html:)

Código: [Seleccionar]
<html>
<head>
<meta charset="utf-8">
</head>

 <form id="form1" name="form1" method="get" action="script2.php">
<p>Pueblo:
  <input type="text" name="pueblo" value="">
  Fiesta: <input type="text" name="fiesta" value="">       
  </p>
<p>Fecha inicio (formato: día-mes-año):
  <input type="text" name="fecha_inicio" value="">
  </p>
<p>Fecha fin (formato: día-mes-año):   
          <input type="text" name="fecha_fin" value="">       
  </p>
<p>
  <input type="submit"/>
  </p>       
    </form>
</html>


Y crea este archivo script2.php, también simplemente para comprobar qué te devuelve:

Código: [Seleccionar]
<?php 
$pueblo$_GET['pueblo'];
$fiesta$_GET['fiesta'];
$fecha_inicio$_GET['fecha_inicio'];
$fecha_fin$_GET['fecha_fin'];

echo '<br/> Recibido dato fecha inicio : '.$fecha_inicio.'<br/>';

$fecha1date("m-d-Y"strtotime("$fecha_inicio"));
echo $fecha1." es fecha1 <br/> y ademas ";
$fecha2=date("Y-m-d",strtotime($fecha1));
echo $fecha2'<br/> Fin ';

?>

Si introduces como fecha inicio 05-04-2077 debes obtener:

Recibido dato fecha inicio : 05-04-2077
04-05-2077 es fecha1
y ademas 2077-05-04
Fin

Es posible que te hayan quedado fragmentos de código erróneos. Si tuvieras esto en el archivo:

Código: [Seleccionar]
<?php 
$pueblo$_GET['pueblo'];
$fiesta$_GET['fiesta'];
$fecha_inicio$_GET['fecha_inicio'];
$fecha_fin$_GET['fecha_fin'];

$fecha_inicio strtotime("$fecha_inicio");

echo '<br/> Recibido dato fecha inicio : '.$fecha_inicio.'<br/>';

$fecha1date("m-d-Y"strtotime("$fecha_inicio"));
echo $fecha1." es fecha1 <br/> y ademas ";
$fecha2=date("Y-m-d",strtotime($fecha1));
echo $fecha2'<br/> Fin ';

?>

Te devuelve esto:

Recibido dato fecha inicio : 3682047600
12-31-1969 es fecha1
y ademas 1969-12-31
Fin

 porque la línea $fecha_inicio = strtotime("$fecha_inicio"); te está borrando el contenido de la variable...

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #7 en: 14 de Agosto 2014, 22:08 »
Hola, lo he probado y me ha funcionado. Gracias.

no quiero ser pesado, pero no veo la diferencia entre tu código y el mío.

tú usas en el php: $fecha1= date("m-d-Y", strtotime("$fecha_inicio"));

y en el mío es:      $fecha_1 = date("d-m-Y", strtotime("$fecha_inicio"));

lo siento... ¿puedes explicarme cuál es la diferencia?
 

URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #8 en: 15 de Agosto 2014, 07:33 »
Bueno, añado otro mensaje.

He probado poniendo esto, para entender porqué no me funcionaba:

Código: [Seleccionar]
$fecha_inicio= date("m-d-Y", strtotime("$fecha_inicio"));
echo $fecha_inicio." es fecha1 <br/> y ademas ";

$fecha_inicio=date("Y-m-d",strtotime($fecha_inicio));
echo $fecha_inicio. '<br/> Fin ';

y me ha funcionado usando formulario2.

pero cuando utilizo mi formulario.html no me funciona...

¿Pero qué está pasando?


De hecho, el principio del código en ambos script es igual, así que no sé que pasa...

¿habrá algo mal en mi formulario?


Añado los scripts modificados:


SCRIPT.HTML

Código: [Seleccionar]
<?php 

$pueblo$_GET['pueblo'];

$fiesta$_GET['fiesta'];

$fecha_inicio$_GET['fecha_inicio'];

$fecha_fin$_GET['fecha_fin'];



$fecha_iniciodate("m-d-Y"strtotime("$fecha_inicio"));
echo $fecha_inicio." es fecha1 <br/> y ademas ";

$fecha_inicio=date("Y-m-d",strtotime($fecha_inicio));
echo $fecha_inicio'<br/> Fin ';


$fecha_findate("m-d-Y"strtotime("$fecha_fin"));
echo $fecha_fin." es fecha fin <br/> y ademas ";

$fecha_fin=date("Y-m-d",strtotime($fecha_fin));
echo $fecha_fin'<br/> Fin ';




$link mysql_connect("mysql13.000webhost.com","a4047274_fiestas","urkaka12");
if(! 
$link )
{
  die(
'No es posible conectar: ' mysql_error());
}
else
{
    echo 
"conexion correcta. "
}


mysql_select_db("a4047274_fiestas"$link);

$result=mysql_query("INSERT INTO valencia VALUES('$pueblo', '$fiesta','$fecha_inicio','$fecha_fin')"$link);

if(! 
$result )
{
  die(
'Datos no insertados de forma correcta. ' mysql_error());
}
else
{
     echo 
"datos insertados";
}
mysql_close($link);

?>


SCRIPT2.HTML

Código: [Seleccionar]
<?php 
$pueblo$_GET['pueblo'];
$fiesta$_GET['fiesta'];
$fecha_inicio$_GET['fecha_inicio'];
$fecha_fin$_GET['fecha_fin'];

echo '<br/> Recibido dato fecha inicio : '.$fecha_inicio.'<br/>';

//$fecha1= date("m-d-Y", strtotime("$fecha_inicio"));
//echo $fecha1." es fecha1 <br/> y ademas ";
//$fecha2=date("Y-m-d",strtotime($fecha1));
//echo $fecha2. '<br/> Fin ';

$fecha_iniciodate("m-d-Y"strtotime("$fecha_inicio"));
echo $fecha_inicio." es fecha1 <br/> y ademas ";

$fecha_inicio=date("Y-m-d",strtotime($fecha_inicio));
echo $fecha_inicio'<br/> Fin ';

?>

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #9 en: 15 de Agosto 2014, 10:43 »
Para comprobar por qué en un caso te funciona y en otro no, no te puedes fijar únicamente en una línea de código, pueden influir muchas cosas, y cuando hablamos de código, un simple espacio que sobre, unas comillas con la tipografía inadecuada, un punto y coma o cualquier cosa mínima pueden hacer que el código funcione o no funcione. A veces la localización de errores es muy trabajosa. He probado con el formulario en la dirección http:/ /prueba123451. site11.com/fiestas/formulario.html y parece que ya lo tienes funcionando, al menos en los resultados aparecen los mensajes de recepción correcta.


URKA84

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 90
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #10 en: 15 de Agosto 2014, 11:50 »
Al final he cambiado el insert y ha funcionado.

Sinceramente no sé que he hecho mal. Supongo que tendré que mirar detenidamente el código para encontrar los errores.

Utilizaré el código que me habéis dado, pero vamos... si no sé que hice mal no voy a aprender xD. No os pido que sigáis ayudándome con esto porque ya habéis hecho bastante, y es un tostón.

De todas formas gracias, el php y el html son fáciles en apariencia... pero meto la pata más que con java.

Gracias.

PD: he puesto esto mismo en el tema de INSERT y PHP, es que me equivoqué.

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #11 en: 15 de Agosto 2014, 12:40 »
Hola buenos dias, pues sinceramente yo tampoco lo se compi, te estado siguiendo en ambos post con las respuestas de Mario( por cierto Mario, gracias por coger la pelota) y tampoco he sido capaz de detectar los fallos que se te estaban produciendo...

La verdad que yo te recomendaría, hagas varios formularios y trastees las distintas formas... con method get, method post, con las funciones date_create, date, date_format, .... Y ver si eres capaz de detectar posibles cosas que te puedan estar pasando.

Sinceramente, con lo poco que yo he trabajado con fechas, siempre las he tratado como una cadena de texto y una vez en bbdd, he usado el Gestor de BBDD para tratarlas(formato, cálculos entre fechas, ordenacion, etc).

Otra cosa que puedes probar, es lo que te comente del:

<input type="date" name="fecha_inicio" />

con esto le facilitaras mucho al usuario el poder insertar una fecha concreta ya que sale una especie de calendario gráfico...

Como te decía yo siempre he tratado las fechas como cadenas de texto:
Código: [Seleccionar]
$fecha_inicio= $_GET['fecha_inicio'];
$fecha_partida=explode("/",$fecha_inicio );
$dia= $fecha_partida[0];
$mes= $fecha_partida[1];
$anio= $fecha_partida[2];
echo $dia."/".$mes."/".$anio;

la función explode corta una cadena de texto por un carácter o cadena concretos...

Hay muchos caminos para llegar a lo mismo, quizá con el tiempo des con la tecla del error que te tiraba, yo sinceramente no lo he visto.

Otro consejo, te recomiendo utilices method="post", no creo ke esto pueda ser la causa, pero ofreceras seguridad a tu sitio, a la par q urls mas limpias.

Y bueno esto que te pasa no será la primera ni la ultima,  creo que a todos nos han podido pasar cosas de este tipo, y bueno como te digo hay mil formas de resolver un problema, si de una manera no te funciona, intenta buscar una alternativa.

Por cierto, si se te da bien java, estudia algo de JSP, es como php pero con código java y tiene mucho juego.

Y nada tio no te preocupes que cosas así nos han pasado a todos, un saludo!
« Última modificación: 15 de Agosto 2014, 12:47 por dongo »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:PHP string a DATE
« Respuesta #12 en: 15 de Agosto 2014, 13:19 »
Hola dongo, yo diría que nos han pasado y al menos a mí me siguen pasando. Es cierto que cuando adquieres experiencia es más rápido detectar fallos, te vuelves más metódico y adquieres mayor destreza con la depuración, pero aún así hay momentos en que las cosas no salen... La recomendación más básica que daría es no escribir ni depurar grandes fragmentos de código de golpe, sino ir poco a poco, incluso a veces línea a línea... También es recomendable formarse siguiendo una trayectoria lógica y progresiva. Por ejemplo mucha gente empieza tratando de usar programación orientada a objetos para acceder a bases de datos cuando todavía no han estudiado qué es un bucle, algo así como empezar la casa por el tejado. De cualquier forma el aprendizaje de la programación es complejo y no creo que nadie tengamos la varita mágica, requiere tiempo y esfuerzo aunque hay quien piensa que en unos días estará todo hecho. En fin, a seguir... Saludos.

 

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".