imprime mal fecha (solucionado)

Iniciado por basickdagger, 20 Agosto 2013, 00:46 AM

0 Miembros y 1 Visitante están viendo este tema.

basickdagger

bueno tengo una duda y es q hasta apenas me di cuenta de q al imprimir un campo de fecha este me imprime una fecha de 1969-12-31...


q estoy haciendo mal??



$fecha=$_POST['fecha'];
echo $fecha;  /***me imprime 14/8/2013  ***/

$fecha2=date("Y-m-d",strtotime($fecha));

echo $fecha2;/**** me imprime 1969-12-31****/



utilizo jquery calendar....

lo raro es q aveces si me coloca bn la fecha y a veces no...aun no encuentro cuando es q me imprime bien y cuando no...

alguna idea??




basickdagger

bueno picandole un poco eh notado q si coloco una fecha q este entre el dia 1 y el dia 12..la fecha se coloca bien...pero despues del dia 12 osea dia 13 en adelante se va todo por el caño... ya probe dia mes y año asi como año mes dia pero me sucede lo mismo...alguna idea?

1mpuls0

#2
.-. y qué se supone que esperas que muestre?, o que quieres hacer?
lee bien que hace la función strtotime y que formatos acepta.

Además agrega la zona horaria correspondiente, bueno depende de lo que vayas a realizar.

Código (php-brief) [Seleccionar]

date_default_timezone_set('America/Mexico_City');


strtotime("2013/8/14") != strtotime("14/8/2013")
abc

basickdagger

Cita de: Darhius en 20 Agosto 2013, 01:36 AM
.-. y qué se supone que esperas que muestre?, o que quieres hacer?
lee bien que hace la función strtotime y que formatos acepta.

Además agrega la zona horaria correspondiente, bueno depende de lo que vayas a realizar.

Código (php-brief) [Seleccionar]

date_default_timezone_set('America/Mexico_City');


strtotime("2013/8/14") != strtotime("14/8/2013")

intento meter la fecha en una BD para luego mostrarla... si no lo convierto, en la bd me lo inserta así 0000-00-00, entonces al cambiar la fecha noto q inserta la fecha correcta solo si el día es del 1 al 12.... supongo q esta tomando el día como mes y al no existir el mes 13 en adelante me pone esa fecha por default(supongo), el detalle aqui es q no me sale.. probe tu código default time zone y me sale lo mismo...

1mpuls0

#4
Cita de: basickdagger en 20 Agosto 2013, 18:29 PM
intento meter la fecha en una BD para luego mostrarla... si no lo convierto, en la bd me lo inserta así 0000-00-00, entonces al cambiar la fecha noto q inserta la fecha correcta solo si el día es del 1 al 12.... supongo q esta tomando el día como mes y al no existir el mes 13 en adelante me pone esa fecha por default(supongo), el detalle aqui es q no me sale.. probe tu código default time zone y me sale lo mismo...

En realidad el problema no está con la zona horaria, solo era un consejo para futuras aplicaciones.
El problema es el formato.

Vamos por paso.

Recibes una variable por post y la guardas
$fecha=$_POST['fecha'];

Se muestra así: 14/8/2013

Si separamos esta linea: $fecha2=date("Y-m-d",strtotime($fecha)); A
$str = strtotime($fecha);
$fecha2=date("Y-m-d", $str);

Al imprimir $str verás que no te muestra nada, esto es porque strtotime no acepta ese formato, sino acepta el formato aaaa-mm-dd en tu caso tendrías que pasar el valor 2013/8/14 (al revés de como lo tienes en la variable $fecha)

Código (php) [Seleccionar]

<?php
date_default_timezone_set('America/Mexico_City');
echo $date="14/8/2013";

list($day$mouth$year) = explode('/'$date);
$aux_date=$year."/".$mouth."/".$day;

$new_date=date("Y-m-d",strtotime($aux_date));

echo "<br>".$new_date;
?>


abc

basickdagger

Cita de: Darhius en 20 Agosto 2013, 18:42 PM
En realidad el problema no está con la zona horaria, solo era un consejo para futuras aplicaciones.
El problema es el formato.

Vamos por paso.

Recibes una variable por post y la guardas
$fecha=$_POST['fecha'];

Se muestra así: 14/8/2013

Si separamos esta linea: $fecha2=date("Y-m-d",strtotime($fecha)); A
$str = strtotime($fecha);
$fecha2=date("Y-m-d", $str);

Al imprimir $str verás que no te muestra nada, esto es porque strtotime no acepta ese formato, sino acepta el formato aaaa-mm-dd en tu caso tendrías que pasar el valor 2013/8/14 (al revés de como lo tienes en la variable $fecha)

Código (php) [Seleccionar]

<?php
date_default_timezone_set('America/Mexico_City');
echo $date="14/8/2013";

list($day$mouth$year) = explode('/'$date);
$aux_date=$year."/".$mouth."/".$day;

$new_date=date("Y-m-d",strtotime($aux_date));

echo "<br>".$new_date;
?>





Mucha gracias me sirvió excelente... aunque me quede con la duda y aún así quiero preguntarte aunque parezca terco xD....

por que al utilizar una fecha por ejemplo...

01/8/2013 hasta  12/8/2013
si me funcionaba el strtotime....

y note tamboen q el día me lo tomaba como mes al colocarle  10/18/2013... y me lo imprimía así al usar strtotime

18/10/2013...

es algo raro... al menos aún no puedo comprenderlo muy bien.. aunque si entiendo el ejemplo que me das(que si me sirvio) donde separa la fecha y la colocas en el orden a Y-m-d...

bueno.. saludos y gracias

1mpuls0

Bien...

Algunos formatos reconocidos son:

mm/dd/yyyy
mm/dd/yy
yyyy/mm/dd
dd-mm-yyyy
yy-mm-dd
yyyy-mm-dd

Más Información -> http://www.php.net/manual/es/datetime.formats.date.php

Por ejemplo si la fecha es 3 de Febrero de 2009 (que se nos mostraría como 03/02/2009), al pasarlo por strtotime nos devolverá el timestamp del 2 de Marzo de 2009, es decir, pensará que le estamos pasando una fecha en formato mm/dd/yyyy.

Para solucionar esto, podemos cambiar las barras por guiones antes de aplicarle la función strtotime. Por ejemplo:

<?php
$fecha_esp = str_replace("/", "-", $fecha_ing);
$timestamp = strtotime($fecha_esp);
?>
En este caso, al pasar a strtotime la fecha en formato dd-mm-yyyy devolverá el timestamp correcto.

Saludos.
abc

basickdagger

Muchas gracias más claro que el agua....abra que hacer la prueba... gracias por tomarte el tiempo de responder.. saludos