Pregunta

¿Alguien sabe una manera de conseguir una cadena de una fecha que contiene el formato de la fecha?

<?php
    $date = date ("2009-10-16 21:30:45");

    // smething like this?
    print date_format ($date);
?>

Lo pregunto porque me gustaría para optimizar esta función que he escrito, por lo general para obtener la fecha con otra zona horaria desde un servidor, sin hacer cosas particulares

<?php
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) {
    if ($date == null) $date = date ($format);
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get ();
    if ($format == null) $format = "Y-m-d H:i:s";
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it
    // if ($format == null) $format = date_format ($date);

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone));
    $date_time->setTimeZone (new DateTimeZone ($timezone));
    return $date_time->format ($format);
}

print get_timezone_offset ("Europe/Rome");
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"));
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s");
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York");
?>

Espero evitar expresiones regulares por razones de rendimiento, pero no sé si esto es posible

¿Fue útil?

Solución

Por lo que yo sé, no hay ninguna forma garantizada de trabajar hacia atrás. La mejor forma podría ser la de tratar de igualar las expresiones regulares contra los formatos esperados conocidos (por ejemplo, para \d{2,4}[-/]\d{2}[-/]\d{2} "Y-m-d"), pero no puedo pensar en una manera fácil de hacer el juego sin usar expresiones regulares. También tendría que comprobar que el formato analizado tiene sentido, y no se puede hacer mucho acerca de las fechas ambiguas como 2 ª marzo de 2009, lo que podría representar como 09/03/02, 2009-03-02, 02/03/09, 03/02/09, o incluso 09/02/03.

Otros consejos

Puede convertir cadena a fecha de marca de tiempo con strtotime y ver con la marca de tiempo lo que quieras. ;)

<?php
$date = "2009-10-16 21:30:45";
$ts   = strtotime($date);
echo date('Y-m-d', $ts);
?>

La función de PHP date () formatea una marca de tiempo a una fecha y hora más legible. Prueba este código para su proyecto,

 <?php
    $date=date_create('2014-10-20');
    date_time_set($date,12,20,55);
    echo date_format($date,'Y-m-d H:i:s');
    ?>

Sé que es tarde, pero ¿sería mejor hacer:

$date = date("Y-m-d");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top