2009-12-06 14 views
8

czy ktoś zna sposób na uzyskanie ciągu od daty, który zawiera format daty?Pobierz format daty taki jak "Y-m-d H: i: s" od daty php

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

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

Pytam o to, ponieważ chciałbym, aby zoptymalizować tę funkcję Mam napisał zwykły uzyskać datę z innej strefy czasowej z serwera, nie robiąc konkretne rzeczy

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

Mam nadzieję, że w celu uniknięcia wyrażenia regularne ze względu na wydajność, ale nie wiem, czy to możliwe

Odpowiedz

4

O ile mi wiadomo, nie ma gwarantowanego sposobu pracy wstecz. Najlepszym sposobem może być dopasowanie wyrażeń regularnych do oczekiwanych dobrze znanych formatów (np. \d{2,4}[-/]\d{2}[-/]\d{2} dla "Y-m-d"), ale nie mogę wymyślić łatwego sposobu dopasowania bez użycia wyrażeń regularnych. Należy również sprawdzić, czy przeanalizowany format ma sens, i nie można zrobić wiele, jeśli chodzi o niejednoznaczne daty, takie jak 2 marca 2009 r., Które mogą być reprezentowane jako 09/03/02, 2009-03-02, 02/03/09, 03/02/09, a nawet 09/02/03.

+1

Jedyną osobą, która rzeczywiście zrozumiała pytanie OP! –

9

Można konwertować datę ciągu na znacznik czasu z strtotime i zrobić ze znacznikiem czasu, co chcesz. ;)

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

Wygląda mi na to, że chce pracować wstecz od daty jego formatu. (od "2009-10-16" do "Y-m-d") – DMI

+0

Mój błąd - skopiowałem kod zbyt szybko - teraz jest OK. – hsz

3

Funkcja daty() PHP formatuje znacznik czasu na bardziej czytelną datę i godzinę. Spróbuj tego kodu do projekcji,

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

Wiem, że jest późno, ale najlepiej byłoby zrobić:

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