DateTime'i PHP'ye Dönüştür


225

Zaten PHP DateTime nesnesini String'e nasıl dönüştürebileceğim konusunda çok fazla site araştırdım. Ben her zaman "String to DateTime" değil, "DateTime to String"

PHP DateTime yankılanabilir, ancak PHP String işlevleri ile benim DateTime işlemek istiyorum.

Benim sorum bu tür bir kod başlayan bir dizeye PHP dateTime Nesnesi nasıl yapabilirim:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);

2
DateTime'ınızı neden dize işlevleriyle işlemek istiyorsunuz? Ne yapmaya çalışıyorsun?
mgiuffrida

2
bir çeşit datetime validator? php
Netorica

Yanıtlar:


413

Sınıf formatyöntemini kullanabilirsiniz DateTime:

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

Herhangi bir formatnedenle başarısız olursa, geri dönecektir FALSE. Bazı uygulamalarda, başarısız durumu ele almak mantıklı olabilir:

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

3
+1 Çalışır. Lütfen bu dönüşümü yapmadan önce null değerinin (aynı satırda) nasıl kontrol edileceğini söyleyebilir misiniz? Teşekkürler!
Watt

2
Hey @Watt, iyi bir nokta! Başarısız davanın nasıl ele alınabileceğini göstermek için örneği genişlettim.
rjz

3
saat dilimini unuttun, bunun yerine $date->format('c')veya $date->format('Y-m-d H:i:s Z')veya kullan$date->format('Y-m-d H:i:s T')
Timo Huovinen

1
-> biçimini kullanabilmek için hangi kullanma ifadesine ihtiyacınız var?
Zend'de bir

1
Bu kısa formu $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');PHP 5.4'ten beri kullanabilirsiniz . Buradan izleyin: docs.php.net/manual/tr/migration54.new-features.php Örnekleme konusunda sınıf üyesi erişimi eklendi, örn. (Yeni Foo) -> bar ().
FFirmenich

17

Bulduğum en basit yol:

$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;

Umut ediyorum bu yardım eder.



15

Gibi date_d.phpile kullanmak için önceden tanımlanmış bazı formatlar vardır 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");

Bunun gibi kullanın:

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

3
DateTime sabitini kullanabilirsiniz (örn. DateTime :: ISO8601), kodun okunmasını kolaylaştırır.
Anh-Tuan Mai

2

Listeyi kullanarak daha kısa yol. Ve her tarih bileşeniyle istediğinizi yapabilirsiniz.

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

2

Benim için çalıştı

$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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.