Konversi DateTime ke String PHP

225

Saya sudah meneliti banyak situs tentang bagaimana saya bisa mengubah objek PHP DateTime ke String. Saya selalu melihat "String to DateTime" dan bukan "DateTime to String"

PHP DateTime dapat digaungkan, tetapi apa yang ingin saya proses DateTime saya dengan fungsi string PHP.

Pertanyaan saya adalah bagaimana saya bisa membuat objek PHP dateTime ke string mulai dari kode semacam ini:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);
Netorica
sumber
2
Mengapa Anda ingin memproses DateTime Anda dengan fungsi string? Apa yang ingin Anda capai?
mgiuffrida
2
semacam validator datetime? dalam php
Netorica

Jawaban:

413

Anda dapat menggunakan formatmetode DateTimekelas:

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

Jika formatgagal karena alasan tertentu, itu akan kembali FALSE. Dalam beberapa aplikasi, mungkin masuk akal untuk menangani kasus yang gagal:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}
rjz
sumber
3
+1 Ini berfungsi. Bisakah Anda juga memberi tahu cara memeriksa nol (di baris yang sama) sebelum melakukan konversi ini. Terima kasih!
Watt
2
Hey @Watt, poin bagus! Saya telah memperluas contoh untuk menunjukkan bagaimana kasus gagal dapat ditangani.
rjz
3
Anda lupa zona waktu, bukan menggunakan $date->format('c')atau $date->format('Y-m-d H:i:s Z')atau$date->format('Y-m-d H:i:s T')
Timo Huovinen
1
apa menggunakan pernyataan yang Anda butuhkan untuk dapat menggunakan -> format? Dikatakan kehilangan sesuatu di Zend
Chemist
1
Anda dapat menggunakan formulir yang lebih singkat ini $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');sejak PHP 5.4. Tonton di sini: docs.php.net/manual/en/migration54.new-features.php Akses anggota kelas pada instantiasi telah ditambahkan, misalnya (Foo baru) -> bar ().
FFirmenich
17

Cara paling sederhana yang saya temukan adalah:

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

Saya harap ini membantu.

pelayar
sumber
15
echo date_format($date,"Y/m/d H:i:s");
Dhawal Naik
sumber
15

Ada beberapa format yang telah ditentukan date_d.phpuntuk digunakan dengan formatseperti:

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

Gunakan seperti ini:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);
Glauco Neves
sumber
3
Anda dapat menggunakan konstanta DateTime (misalnya DateTime :: ISO8601), itu membuat kode lebih mudah dibaca.
Anh-Tuan Mai
2

Cara yang lebih pendek menggunakan daftar. Dan Anda dapat melakukan apa yang Anda inginkan dengan setiap komponen tanggal.

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

Ini bekerja untuk saya

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