2012-05-13 12 views
155

ok, już badałem wiele stron o tym, jak mogę przekonwertować obiekt PHP DateTime na String. Zawsze widzę "String to DateTime", a nie "DateTime to String"Konwertuj DateTime na String PHP

PHP DateTime może być echo, ale co chcę przetworzyć mój DateTime z funkcjami PHP string.

Teraz moje pytanie brzmi: w jaki sposób mogę zrobić PHP DateTime obiektu na ciąg począwszy od tego rodzaju kodów

<?php 
$dts = new DateTime(); //this returns the current date time 
echo strlen($dts); 
?> 
+1

Dlaczego chcesz przetwarzać DateTime za pomocą funkcji ciągów? Co próbujesz osiągnąć? – mgiuffrida

+1

jakiś rodzaj walidatora datetime? w php –

+2

[RTFM] (http://php.net/manual/en/class.datetime.php) – NDM

Odpowiedz

283

Można użyć metody format klasy DateTime:

$date = new DateTime('2000-01-01'); 
$result = $date->format('Y-m-d H:i:s'); 

Jeśli z jakiegoś powodu nie powiedzie się format, zwróci ona FALSE. W niektórych zastosowaniach, może to sens, aby poradzić sobie z sprawę niepowodzeniem:

if ($result) { 
    echo $result; 
} else { // format failed 
    echo "Unknown Time"; 
} 
+2

+1 Działa. Czy możesz również powiedzieć, jak sprawdzić zerowy (w tej samej linii) przed wykonaniem tej konwersji. Dzięki! – Watt

+1

Hej @ Wat, dobry punkt! Poszerzyłem ten przykład, aby pokazać, jak można załatać sprawę, która zawodzi. – rjz

+1

zapomniałeś o strefie czasowej, zamiast tego użyj formatu '$ date-> (" c ")' lub '$ date-> (" Ymd H: i: s Z ') 'lub' $ date-> format (' Ymd H: i: s T ') ' –

13

Najprostszym sposobem znalazłem to:

<?php 
$date=new DateTime(); //this returns the current date time 
$result = $date->format('Y-m-d-H-i-s'); 
echo $result; 
echo "<br>"; 
$krr = explode('-',$result); 
echo "<br>"; 
$result = implode("",$krr); 
echo $result; 
?> 

Mam nadzieję, że to pomaga.

0

Jego pracował dla mnie

$start_time = date_create_from_format('Y-m-d H:i:s', $start_time); 
    $current_date = new DateTime(); 
    $diff = $start_time->diff($current_date); 
    $aa= (string)$diff->format('%R%a'); 
    echo gettype($aa); 
8
echo date_format($date,"Y/m/d H:i:s"); 
10

Istnieje kilka predefiniowanych formatów w date_d.php korzystania z format jak:

define ('DATE_ATOM', "Y-m-d\TH:i:sP"); 
define ('DATE_COOKIE', "l, d-M-y H:i:s T"); 
define ('DATE_ISO8601', "Y-m-d\TH:i:sO"); 
define ('DATE_RFC822', "D, d M y H:i:s O"); 
define ('DATE_RFC850', "l, d-M-y H:i:s T"); 
define ('DATE_RFC1036', "D, d M y H:i:s O"); 
define ('DATE_RFC1123', "D, d M Y H:i:s O"); 
define ('DATE_RFC2822', "D, d M Y H:i:s O"); 
define ('DATE_RFC3339', "Y-m-d\TH:i:sP"); 
define ('DATE_RSS', "D, d M Y H:i:s O"); 
define ('DATE_W3C', "Y-m-d\TH:i:sP"); 

wykorzystanie takich jak ten:

$date = new \DateTime(); 
$string = $date->format(DATE_RFC2822); 
+2

Możesz użyć stałej DateTime (np. DateTime :: ISO8601), dzięki czemu kod jest łatwiejszy do odczytania. –

0

Krótszy sposób korzystania z listy. I możesz robić, co chcesz z każdym komponentem daty.

list($day,$month,$year,$hour,$min,$sec) = explode("/",date('d/m/Y/h/i/s')); 
echo $month.'/'.$day.'/'.$year.' '.$hour.':'.$min.':'.$sec;