2009-12-06 7 views
8

kannte jemand einen Weg, um eine Zeichenfolge von Datum, das das Format des Datums enthält, zu erhalten?Get Datumsformat wie "Y-m-d H: i: s" von einem PHP-Datum

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

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

Ich frage das, weil ich diese Funktion optimieren mag ich geschrieben habe, übliche Datum mit einer anderen Zeitzone von Server zu bekommen, ohne besondere Dinge zu tun

<?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"); 
?> 

Ich hoffe, zu vermeiden Reguläre Ausdrücke aus Leistungsgründen, aber ich weiß nicht, ob das möglich ist

Antwort

4

Soweit ich weiß, gibt es keinen garantierten Weg rückwärts zu arbeiten. Der beste Weg könnte sein, zu versuchen, reguläre Ausdrücke mit erwarteten bekannten Formaten abzugleichen (z. B. \d{2,4}[-/]\d{2}[-/]\d{2} für "Y-m-d"), aber ich kann mir keinen einfachen Weg vorstellen, den Abgleich ohne Verwendung von regulären Ausdrücken durchzuführen. Sie müssten auch überprüfen, ob das geparste Format sinnvoll ist, und Sie können nicht viel über mehrdeutige Daten wie 2. März 2009 machen, die als 09/03/02, , 02/03/09, 03/02/09 oder sogar 09/02/03 dargestellt werden könnten.

+1

Die einzige Person, die die Frage des OP tatsächlich verstanden hat! –

9

Sie können Zeichenfolge Datum in Zeitstempel mit strtotime konvertieren und mit dem Timestamp was immer Sie wollen. ;)

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

Es sieht für mich wie er will zurück zu seinem Format von einem Datum arbeiten. (d. h. von "2009-10-16" bis "Y-m-d") – DMI

+0

Mein Fehler - Ich kopiere Code ist zu schnell - jetzt ist es in Ordnung. – hsz

3

Die Funktion PHP date() formatiert einen Zeitstempel in ein lesbareres Datum und eine bessere Uhrzeit. Versuchen Sie diesen Code für Sie projizieren,

<?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

Ich weiß, es ist spät, aber wäre es am besten zu tun ist:

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