Những thứ cơ bản
Cách đơn giản để chuyển đổi định dạng ngày này sang định dạng khác là sử dụng strtotime()
với date()
. strtotime()
sẽ chuyển đổi ngày thành Dấu thời gian Unix . Unix Timestamp sau đó có thể được chuyển qua date()
để chuyển đổi nó sang định dạng mới.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
Hoặc như một lớp lót:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Hãy nhớ rằng strtotime()
ngày yêu cầu phải ở định dạng hợp lệ . Việc không cung cấp định dạng hợp lệ sẽ dẫn đến strtotime()
trả về sai, điều này sẽ khiến ngày của bạn là 1969-12-31.
Sử dụng DateTime()
Kể từ PHP 5.2, PHP đã cung cấp DateTime()
lớp cung cấp cho chúng tôi các công cụ mạnh hơn để làm việc với ngày (và thời gian). Chúng ta có thể viết lại đoạn mã trên bằng cách sử dụng DateTime()
:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Làm việc với dấu thời gian Unix
date()
lấy một bộ đếm thời gian Unix làm tham số thứ hai của nó và trả về một ngày được định dạng cho bạn:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () hoạt động với dấu thời gian Unix bằng cách thêm dấu @
trước dấu thời gian:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
Nếu dấu thời gian bạn có là tính bằng mili giây (có thể kết thúc bằng 000
và / hoặc dấu thời gian dài mười ba ký tự), bạn sẽ cần chuyển đổi nó thành giây trước khi bạn có thể chuyển đổi nó sang định dạng khác. Có hai cách để làm điều này:
- Cắt bớt ba chữ số cuối bằng cách sử dụng
substr()
Việc cắt xén ba chữ số cuối có thể được thực hiện bằng nhiều cách, nhưng sử dụng substr()
là cách dễ nhất:
$timestamp = substr('1234567899000', -3);
Bạn cũng có thể chuyển đổi dấu thời gian thành giây bằng cách chia cho 1000. Vì dấu thời gian quá lớn đối với các hệ thống 32 bit để làm toán nên bạn sẽ cần sử dụng thư viện BCMath để thực hiện phép toán dưới dạng chuỗi:
$timestamp = bcdiv('1234567899000', '1000');
Để có được Dấu thời gian Unix, bạn có thể sử dụng strtotime()
trả về Dấu thời gian Unix:
$timestamp = strtotime('1973-04-18');
Với DateTime () bạn có thể sử dụng DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Nếu bạn đang chạy PHP 5.2, bạn có thể sử dụng U
tùy chọn định dạng thay thế:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Làm việc với các định dạng ngày không chuẩn và mơ hồ
Thật không may, không phải tất cả các ngày mà nhà phát triển phải làm việc đều ở định dạng chuẩn. May mắn thay, PHP 5.3 đã cung cấp cho chúng tôi một giải pháp cho điều đó. DateTime::createFromFormat()
cho phép chúng tôi nói với PHP định dạng của chuỗi ngày để nó có thể được phân tách thành công thành đối tượng DateTime để thao tác thêm.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
Trong PHP 5.4, chúng tôi đã đạt được khả năng truy cập thành viên lớp khi khởi tạo đã được thêm vào, cho phép chúng tôi biến DateTime()
mã của mình thành một lớp lót:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');