Konwertuj DateTime na String PHP

225

Przeszukałem już wiele witryn, w jaki sposób mogę przekonwertować obiekt PHP DateTime na String. Zawsze widzę „String to DateTime”, a nie „DateTime to String”

PHP DateTime można powtórzyć, ale co chcę przetwarzać DateTime za pomocą funkcji łańcuchowych PHP.

Moje pytanie brzmi: w jaki sposób mogę ustawić obiekt dateTime PHP na ciąg znaków rozpoczynający się od tego rodzaju kodu:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);
Netorica
źródło
2
Dlaczego chcesz przetwarzać swój DateTime za pomocą funkcji łańcuchowych? Co próbujesz osiągnąć
mgiuffrida
2
jakiś rodzaj walidatora daty i godziny? w php
Netorica

Odpowiedzi:

413

Możesz użyć formatmetody DateTimeklasy:

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

Jeśli formatz jakiegoś powodu zawiedzie, wróci FALSE. W niektórych aplikacjach sensowne może być załatwienie nieudanej sprawy:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}
rjz
źródło
3
+1 Działa. Czy możesz również powiedzieć, jak sprawdzić wartość null (w tej samej linii) przed wykonaniem tej konwersji. Dzięki!
Watt
2
Cześć @Watt, dobra uwaga! Rozszerzyłem przykład, aby pokazać, w jaki sposób można rozwiązać przypadek niepowodzenia.
rjz
3
zapomniałeś strefy czasowej, zamiast tego użyj $date->format('c')lub $date->format('Y-m-d H:i:s Z')lub$date->format('Y-m-d H:i:s T')
Timo Huovinen,
1
jakiej instrukcji używania potrzebujesz, aby móc używać -> format? Mówi, że brakuje czegoś w Zend
Chemik
1
Możesz użyć tej krótszej formy $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');od PHP 5.4. Obejrzyj tutaj: docs.php.net/manual/en/migration54.new-features.php Dodano dostęp do klasy podczas tworzenia instancji, np. (Nowy Foo) -> bar ().
FFirmenich
17

Najprostszym sposobem, jaki znalazłem, jest:

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

Mam nadzieję, że to pomoże.

żeglarz
źródło
15
echo date_format($date,"Y/m/d H:i:s");
Dhawal Naik
źródło
15

Istnieje kilka predefiniowanych formatów date_d.phpdo użycia z format:

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

Użyj w ten sposób:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);
Glauco Neves
źródło
3
Możesz użyć stałej DateTime (np. DateTime :: ISO8601), dzięki czemu kod jest łatwiejszy do odczytania.
Anh-Tuan Mai
2

Krótszy sposób przy użyciu listy. I możesz robić, co chcesz z każdym składnikiem daty.

list($day,$month,$year,$hour,$min,$sec) = explode("/",date('d/m/Y/h/i/s'));
echo $month.'/'.$day.'/'.$year.' '.$hour.':'.$min.':'.$sec;
Lisandro
źródło
2

To zadziałało 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);
sumit sharma
źródło