Chuyển đổi DateTime thành Chuỗi PHP


225

Tôi đã nghiên cứu rất nhiều trang web về cách tôi có thể chuyển đổi đối tượng DateTime của PHP thành Chuỗi. Tôi luôn thấy "String to DateTime" chứ không phải "DateTime to String"

PHP DateTime có thể được lặp lại, nhưng những gì tôi muốn xử lý DateTime của mình với các hàm chuỗi PHP.

Câu hỏi của tôi là làm thế nào tôi có thể tạo đối tượng dateTime PHP thành một chuỗi bắt đầu từ loại mã này:

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

2
Tại sao bạn muốn xử lý DateTime của mình với các hàm chuỗi? Bạn đang cố gắng để thực hiện?
mgiuffrida

2
một số loại của trình xác nhận datetime? trong php
Netorica

Câu trả lời:


413

Bạn có thể sử dụng formatphương thức của DateTimelớp:

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

Nếu formatthất bại vì một số lý do, nó sẽ trở lại FALSE. Trong một số ứng dụng, có thể có ý nghĩa để xử lý trường hợp không thành công:

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

3
+1 Nó hoạt động. Bạn có thể vui lòng cho biết cách kiểm tra null (trong cùng một dòng) trước khi thực hiện chuyển đổi này. Cảm ơn!
Oát

2
Này @Watt, điểm tốt! Tôi đã mở rộng ví dụ để chỉ ra cách xử lý trường hợp thất bại.
rjz

3
bạn đã quên múi giờ, thay vào đó hãy sử dụng $date->format('c')hoặc $date->format('Y-m-d H:i:s Z')hoặc$date->format('Y-m-d H:i:s T')
Timo Huovinen

1
bạn cần sử dụng câu lệnh nào để có thể sử dụng -> định dạng? Nó nói thiếu một cái gì đó trong Zend
Nhà hóa học

1
Bạn có thể sử dụng mẫu ngắn hơn $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');kể từ PHP 5.4. Xem tại đây: docs.php.net/manual/en/migration54.new-features.php Truy cập thành viên lớp trên khởi tạo đã được thêm vào, ví dụ (Foo mới) -> bar ().
FFirmenich

17

Cách đơn giản nhất tôi tìm thấy là:

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

Tôi hy vọng nó sẽ giúp.



15

Có một số định dạng được xác định trước date_d.phpđể sử dụng với formatnhư:

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

Sử dụng như thế này:

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

3
Bạn có thể sử dụng hằng số DateTime (ví dụ DateTime :: ISO8601), nó giúp mã dễ đọc hơn.
Anh-Tuấn Mai

2

Cách ngắn hơn sử dụng danh sách. Và bạn có thể làm những gì bạn muốn với mỗi thành phần ngày.

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

2

Nó làm việc cho tôi

$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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.