2009-12-06 20 views
8

¿Alguien sabe una manera de conseguir una cadena de fecha que contiene el formato de la fecha?consigo formato de fecha como "Y-m-d H: i: s" de una fecha php

<?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, habitual para obtener cita con otra zona horaria del 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 para evitar expresiones regulares por motivos de rendimiento, pero no sé si esto es posible

Respuesta

4

Por lo que yo sé, no hay una forma garantizada de trabajar hacia atrás. La mejor manera podría ser intentar emparejar expresiones regulares con formatos conocidos conocidos (por ejemplo, \d{2,4}[-/]\d{2}[-/]\d{2} para "Y-m-d"), pero no puedo pensar en una forma sencilla de hacer la comparación sin usar expresiones regulares. También debería verificar que el formato analizado tenga sentido, y no puede hacer mucho respecto de fechas ambiguas como el 2 de marzo de 2009, que podrían representarse como 09/03/02, 2009-03-02, 02/03/09, 03/02/09 o incluso 09/02/03.

+1

¡La única persona que realmente entendió la pregunta de OP! –

9

Puede convertir la fecha de la cadena en la marca de tiempo con strtotime y hacer con la marca de tiempo lo que quiera. ;)

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

A mi me parece como si él quiere trabajar hacia atrás desde una fecha a su formato. (es decir, de "2009-10-16" a "Y-m-d") – DMI

+0

Mi error, he copiado el código demasiado rápido, ahora está bien. – hsz

3

La fecha() de PHP 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'); 
    ?> 
3

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

$date = date("Y-m-d");