PDA

Ver la Versión Completa : Formato de fechas


Kipow
18-03-2009, 10:47:05
Bueno tengo una duda estoy empezando a probar php y mysql, me surge esta duda, las fechas en mysql estan guardadas en formato Y-m-d ahora bien como puedo hacer para formatearla d-m-Y, tengo el siguiente codigo pero en la fecha me despliega el 01-01-1970. :)

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname,$conn);
// Aqui voy a generar la tabla de las actualizaciones
$result = mysql_query("SELECT id, fecha, descripcion, modulo FROM kip_updatelog order by id");
echo "<div align=center>";
echo "<table>";
echo "<tr><th>ID</th><th width=100>Fecha</th><th>Descripcion</th><th>Modulo</th></tr>";
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
echo "<tr>";
echo "<td>".$row{'id'}."</td>";
echo "<td>".date('d/m/Y',$row{'fecha'})."</td>";
echo "<td>".$row{'descripcion'}."</td>";
echo "<td>".$row{'modulo'}."</td>";
echo "</tr>";
}
echo "</table>";

echo "</div>";
mysql_close($conn);

dec
18-03-2009, 12:24:17
Hola,

Lo que pasa es que la función "date()" requiere como segundo parámetro una "marca de tiempo" (un "timestamp") y no le vale con la fecha en el formato en que la guarda MySQL, en este caso. Aquí te dejo un par de métodos de cierta clase "DateUtils", que, tal vez puedas aprovechar:


/**
* Decode a datetime MySQL format into an Array.
*
* This method decode a datetime in MySQL format into an
* Array that contain all Year, Month, Day, Hour, Minutes
* and Seconds in their fields.
*
* @static
* @access public
* @param $mysqlDatetime String datetime value in MySQL format
* @return Array Decoded MySQL datetime
*
*/
public static function DecodeMySQLDateTime($mysqlDatetime){
return array(
'year' => (int)substr($mysqlDatetime, 0, 4),
'month' => (int)substr($mysqlDatetime, 5, 2),
'day' => (int)substr($mysqlDatetime, 8, 2),
'hour' => (int)substr($mysqlDatetime, 11, 2),
'minutes' => (int)substr($mysqlDatetime, 14, 2),
'seconds' => (int)substr($mysqlDatetime, 17, 2)
);
}

/**
* Get the UNIX timestamp representation of a MySQL datetime.
*
* This method convert a MySQL date time in the UNIX timestamp.
*
* @static
* @access public
* @param $mySqlDatetime String MySQL datatime to be converted
* @return Integer UNIX timestamp representation of MySQL the datatime
*
*/
public static function MySQLDatetimeToTimestamp($mySqlDatetime){
$d = self::DecodeMySQLDateTime($mySqlDatetime);
if(is_array($d)){
return mktime($d['hour'], $d['minutes'], $d['seconds'],
$d['month'], $d['day'], $d['year']);
}else{
return 0;
}
}


Una vez tengas el "timestamp" ya sí puedes usar la función "date()".

Kipow
18-03-2009, 13:14:41
ok, gracias. me imagine que seria algo mas facil jeje pero bueno esto lo voy a incluir dentro de mis librerias comunes.

dec
18-03-2009, 13:35:56
Hola,

Bueno, lo cierto es que son las funciones que yo estoy usando ahora mismo en cierto proyecto, pero, no dudo que pudiera hacerse de otra forma... sobre todo teniendo en cuenta los cambios con PHP 5, igual algún compañero nos da otra idea. :)

Por otro lado, viendo uno de los métodos que he copiado, encuentro cierta condición innecesaria, ahora mismo... lo dejaría de este modo:


public static function MySQLDatetimeToTimestamp($mySqlDatetime){
$d = self::DecodeMySQLDateTime($mySqlDatetime);
return mktime(
$d['hour'], $d['minutes'], $d['seconds'],
$d['month'], $d['day'], $d['year']
);
}


Ah, otra cosa. No sé si te interesará o no, pero, MySQL cuenta con registros del tipo "timestamp", de modo que, si se usaran estos, directamente, podría usarse la función "date()". Sólo lo comento por si acaso. ;)