แปลง DateTime เป็น String PHP


225

ฉันได้วิจัยเว็บไซต์จำนวนมากแล้วว่าฉันจะแปลงวัตถุ PHP DateTime เป็น String ได้อย่างไร ฉันมักจะเห็น "String to DateTime" และไม่ใช่ "DateTime to String"

PHP DateTime สามารถสะท้อน แต่สิ่งที่ฉันต้องการประมวลผล DateTime ของฉันด้วยฟังก์ชั่นสตริง PHP

คำถามของฉันคือฉันจะทำให้ PHP dateTime Object เป็นสตริงเริ่มต้นจากรหัสประเภทนี้ได้อย่างไร:

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

2
ทำไมคุณถึงต้องการประมวลผล DateTime ด้วยฟังก์ชั่นสตริง คุณพยายามทำอะไรให้สำเร็จ
mgiuffrida

2
ตัวตรวจสอบความถูกต้องของข้อมูลและเวลาหรือไม่ ใน php
Netorica

คำตอบ:


413

คุณสามารถใช้formatวิธีการDateTimeเรียน:

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

หากล้มเหลวด้วยเหตุผลบางอย่างก็จะกลับมาformat FALSEในบางแอปพลิเคชันมันอาจเหมาะสมที่จะจัดการกับกรณีที่ล้มเหลว

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

3
+1 มันใช้ได้ คุณกรุณาบอกวิธีการตรวจสอบค่าว่าง (ในบรรทัดเดียวกัน) ก่อนทำการแปลงนี้ได้ไหม ขอบคุณ!
วัตต์

2
เฮ้ @Watt จุดดี! ฉันได้ขยายตัวอย่างเพื่อแสดงวิธีจัดการกรณีที่ล้มเหลว
rjz

3
คุณลืมเขตเวลาใช้แทน$date->format('c')หรือ$date->format('Y-m-d H:i:s Z')หรือ$date->format('Y-m-d H:i:s T')
ติโม Huovinen

1
คุณต้องใช้คำสั่งอะไรเพื่อให้สามารถใช้ -> ฟอร์แมต? มันบอกว่าหายไปบางอย่างใน Zend
Chemist

1
คุณสามารถใช้แบบฟอร์มที่สั้นกว่านี้ได้$result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');ตั้งแต่ PHP 5.4 ดูที่นี่: docs.php.net/manual/en/migration54.new-features.php เพิ่ม การเข้าถึงสมาชิกระดับบนอินสแตนซ์แล้วเช่น (new Foo) -> bar ()
FFirmenich

17

วิธีที่ง่ายที่สุดที่ฉันพบคือ:

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

ฉันหวังว่ามันจะช่วย



15

มีบางรูปแบบที่กำหนดไว้ล่วงหน้าdate_d.phpเพื่อใช้กับสิ่งที่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");

ใช้แบบนี้:

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

3
คุณสามารถใช้ค่าคงที่ DateTime (เช่น DateTime :: ISO8601) ทำให้อ่านรหัสได้ง่ายขึ้น
Anh-Tuan Mai

2

วิธีที่สั้นกว่าโดยใช้รายการ และคุณสามารถทำสิ่งที่คุณต้องการได้ด้วยองค์ประกอบวันที่แต่ละรายการ

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

2

มันใช้งานได้สำหรับฉัน

$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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.